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

时间:2017-01-15 12:06:43

标签: asp.net-mvc

我需要在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”的值。

有人可以帮我吗? 谢谢! :)

1 个答案:

答案 0 :(得分:2)

如果要在回发操作中修改模型属性的值,则需要将其从ModelState中删除:

public ActionResult Index(string nr)
{
    ModelState.Remove("nr");
    model.nr = "123" + nr;
    return View(model);
}

原因是TextBoxFor等Html帮助程序首先会查看ModelState中存在的值,然后在渲染值时查看视图模型属性中的值。这是设计的。