MVC如何在一个页面中对2种不同的方法做出反应

时间:2013-01-24 03:44:02

标签: asp.net-mvc razor asp.net-mvc-4

我有两种方法:添加和减去。我希望当点击添加按钮时,第三个文本框显示A + B的结果;单击“减去”按钮,第3个文本框显示A - B的结果。

我认为这应该是一件简单的事情(因为它可以在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");
    }
}

2 个答案:

答案 0 :(得分: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" />
}

注意提交输入上的name属性,这将使默认模型绑定器绑定到名为Calculate的属性。

对于你来说,View模型使用与

类似的东西
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时,它使用该属性来计算针对值A和B运行的操作

答案 1 :(得分:0)

其他简单的方法是,按钮可以使用相同的名称。然后在控制器中读取它。

<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{

}
}