2013-01-24 2 views
0

두 가지 방법이 있습니다 : 더하기와 빼기. 추가 버튼을 클릭하면 세 번째 텍스트 상자에 A + B의 결과가 표시됩니다. "빼기"버튼을 클릭하면 세 번째 텍스트 상자에 A - B의 결과가 표시됩니다.MVC 한 페이지에서 두 가지 방법으로 반응하는 방법

(ASP.NET WebForm 응용 프로그램에서 몇 줄의 코드 내에서 수행 할 수 있기 때문에) . 그러나 여러 번 시도하고 몇 명의 친구에게 물어 본 후에도 여전히 해결책을 찾을 수 없습니다. ...

@using (Html.BeginForm("Add", "MyMVC")) 
{ 
    <ol> 
     <li> 
      @Html.TextAreaFor(m => m.A) 
     </li> 
     <li><span>+ </span></li> 
     <li> 
      @Html.TextAreaFor(m => m.B) 
     </li> 
     <li><span>= </span></li> 
     <li> 
      @Html.TextAreaFor(m => m.C) 
     </li> 
    </ol> 
    @{ 
    Html.RenderAction("Calculate", "MyMVC"); 
    } 
    @{ 
    Html.RenderAction("Subtract", "MyMVC"); 
    } 
} 
+0

컨트롤러 액션을 호출 필요가 없습니다, 당신은 사용하여 쉽게 할 수있는' –

+0

@Karthik 안녕 KARTHIK, 답장을 들으 javascript'. 그러나이 연습은 모두 MVC와 Razor 개념에 익숙해지는 것에 관한 것입니다. – Franva

답변

1

RenderAction 태그는 필요하지 않습니다. 또한 BeginForm 확장은 자체에 게시하는 양식 요소를 렌더링해야합니다.

@model SampleMvc.Models.SumModel 

@using (Html.BeginForm()) 
{ 
    <ol> 
     <li> 
      @Html.TextAreaFor(m => m.A) 
     </li> 
     <li><span>+ </span></li> 
     <li> 
      @Html.TextAreaFor(m => m.B) 
     </li> 
     <li><span>= </span></li> 
     <li> 
      @Html.TextAreaFor(m => m.C) 
     </li> 
    </ol> 
    <input type="submit" id="add" name="Calculate" value="Add" /> 
    <input type="submit" id="subtract" name="Calculate" value="Subtract" /> 
} 

공지 사항에 제출 입력에 이름 속성을보기를 변경

,이 계산이라는 속성에 바인딩 기본 모델 바인더를 가능하게 할 것이다. 그런 다음 컨트롤러에

public class SumModel { 
     public int A { get; set; } 
     public int B { get; set; } 
     public int C { get; private set; } 
     public string Calculate { get; set; } 

     public void RunCalculation() { 
      if (Calculate.Equals("add",StringComparison.InvariantCultureIgnoreCase)) { 
       C = A + B; 
      } else { 
       C = A - B; 
      } 
     } 
    } 

와 유사한 모델을 사용 무언가를보기 위해

과 유사한 행동을 가지고 양식이 제출 입력에 클릭 이벤트를 통해 값을 제출

public ActionResult Calculate() { 
     return View(); 
    } 

[HttpPost] 
public ActionResult Calculate(SumModel sumModel) { 
    sumModel.RunCalculation(); 

    return View(sumModel); 
} 

버튼이 SumModel의 Calculate 속성에 자동으로 바운드됩니다.

그런 다음 방법 RunCalculation가 호출 될 때

+0

안녕하세요 head5150, 솔루션을 사용해 보았지만 Claculate() 메소드도 실행되지 않았습니다. 내보기는 Index.cshtml입니다. 그래서 Calculate 메소드를 Index로 변경했습니다. (그렇게하고 싶지는 않지만, 메소드는 페이지와 비슷한 이름보다는 의미있는 이름을 원합니다). 그런 다음 메서드 (인덱스 (MyModel 모델))에 도달하지만 C가 업데이트되지 않습니다. – Franva

+0

@Franva Action 인덱스 (MyModel 모델)에서 model.RunCalculation()에 중단 점을 배치하십시오. 나는 당신이 제대로 구현했다고 생각하지 않는다. 코드는 대답을 게시하기 전에 테스트되었다. 인덱스 (MyModel 모델)를 PreferredName (MyMethod 메서드)으로 변경하고 Html.BeginForm()을 Html.BeginForm ("PreferredName", "Home")으로 변경하지 않으려면 HomeController에 대한 작업이 있다고 가정하십시오. – heads5150

+0

, 안녕하세요. heads5150, 설명해 주셔서 감사합니다. 마지막으로 Calculate 속성을 코드를 기반으로하는 작업의 매개 변수로보기로 이동하면됩니다. 고마워요 :) MVC에는 하나 이상의 액션을 별도로 인식 할 수있는 방법이 없으므로 트리거 할 액션을 나타내는 플래그 변수를 추가해야합니다. 그러나 여분의 플래그 변수없이 다른 메소드에 코드를 작성하려고합니다. 가능한가? – Franva

0

다른 쉬운 방법은 값 A와 B에 대해 실행되는 작업을 해결하기 위해 속성을 사용하여, 당신은 버튼에 같은 ​​이름을 가질 수 있습니다. 그것을 컨트롤러에서 읽으십시오.

<input type="submit" id="add" name="buttonclicked" value="Add" /> 
<input type="submit" id="subtract" name="buttonclicked" value="Subtract" /> 


[HttpPost] 
public ActionResult Index(string buttonclicked, SumModel sumModel) { 
if(buttonclicked=="add"){ 

} 
else{ 

} 
} 
+0

안녕하세요. 나는 내 질문에 대한 답을 선택해도 당신의 답을 보니 정말 기쁩니다. 닫힌 질문에 답하고 싶은 사람들은 많지 않습니다. 따라서 귀하의 의지에 감사해야하며 귀하의 솔루션에서 문제가 발생했는지 알려 드릴 것입니다. 건배 :) – Franva

관련 문제