我有两种方法:添加和减去。我希望当点击添加按钮时,第三个文本框显示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");
}
}
答案 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{
}
}