我遇到一个问题,当我从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>
}
答案 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();