Razor文本框中显示的值与模型中的值不同

时间:2015-12-24 17:13:24

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我遇到一个问题,当我从Razor代码访问它时,我在模型中设置的值是不正确的。如果我在下面的if语句上放置一个断点并检查Model.TestVal,它包含正确的值。但是,该值不是生成的文本框中显示的值,我无法弄清楚为什么两者不同。

    @if (Model.IsValid)
    {
        <div class="testRow">
            <label class="testLabel" for="TestVal">Test Value:</label>
            <div class="testField" id="TestVal">@Html.TextBoxFor(m => m.TestVal, ViewHelper.IsEditable("TestVal"))</div>
        </div>
    }

1 个答案:

答案 0 :(得分:3)

TextBoxFor助手将首先查看ModelState中的值,然后查看模型中的值。当人们尝试在POST操作中更改某些模型属性值时,这是一个常见问题:

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    model.SomeProperty = "some new value";
    return View(model);
}

在这种情况下,不会考虑新值,因为ModelState已经包含原始POSTed值以及TextBoxFor帮助器将显示的内容。要使其工作,您还需要从模型状态中删除原始值:

[HttpPost]
public ActionResult Index(MyViewModel model)
{
    ModelState.Remove("SomeProperty");
    model.SomeProperty = "some new value";
    return View(model);
}

或完全消除它:

ModelState.Clear();