我需要在MVC中做一个计算器 ASP.NET。首先,我想从控制器中的输入字段中接收值,并为其添加字符串"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"。
有人可以帮助我吗?谢谢!:)
如果要在回发操作中修改模型属性的值,则需要将其从ModelState
中删除:
public ActionResult Index(string nr)
{
ModelState.Remove("nr");
model.nr = "123" + nr;
return View(model);
}
这样做的原因是,Html 帮助程序(如 TextBoxFor
)在呈现值时将首先查看ModelState
中存在的值,然后在视图模型属性中查看该值。这是设计使然。