我需要在ASP.NET MVC中做一个计算器。 首先,我想从控制器的输入字段接收值,并在字符串“123”前面加上它。最后,我将处理收到的表达并返回结果。
我有以下型号:
namespace CalculatorCloud.Models {
public class Calculator
{
public string nr { get; set; }
} }
在视图中我使用的是模型:
@model CalculatorCloud.Models.Calculator
@{
ViewBag.Title = "Calculator";
}
@using (Html.BeginForm("Index", "Home"))
{
<div>
<div class="header">
@Html.TextBoxFor(m => m.nr, new { @id = "nr"})
<input type="button" id="C" name="C" value="C" />
<input type="button" id="back" name="back" value="<-" />
[...]
<div class="sum">
<input type="submit" value="=" />
</div>
</div>
}
控制器是这样的:
namespace CalculatorCloud.Controllers
{
public class HomeController : Controller
{
Calculator model = new Calculator();
public ActionResult Index(string nr)
{
model.nr = "123" + nr;
return View(model);
}
}
}
我遇到以下问题:当按下提交按钮时,我希望在文本框中显示该值以前在文本框中的值,前缀为字符串“123”。 但是现在它保留了文本框中没有字符串“123”的值。
有人可以帮我吗? 谢谢! :)
答案 0 :(得分:2)
如果要在回发操作中修改模型属性的值,则需要将其从ModelState
中删除:
public ActionResult Index(string nr)
{
ModelState.Remove("nr");
model.nr = "123" + nr;
return View(model);
}
原因是TextBoxFor
等Html帮助程序首先会查看ModelState
中存在的值,然后在渲染值时查看视图模型属性中的值。这是设计的。