根据 MVC 中的模型更新视图中 ASP.NET 字段



我需要在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中存在的值,然后在视图模型属性中查看该值。这是设计使然。

最新更新