0

我有以下 HTML 帮助器文本框:

@Html.TextBoxFor(m => m.Email, Model.Active ? new { @readonly = "readonly", @style = "background:#E8E8E8" } : new Object { })

当我更改操作中的电子邮件值(在返回的模型中)然后将active=true(也在模型中)设置为只读时,电子邮件文本框值不会使用来自模型的新值更新,我检查了确认模型将使用新电子邮件返回并且 active=1。

就好像在渲染模型的值之前设置了只读。

任何帮助表示赞赏,谢谢

4

1 回答 1

0

当您回发模型时,其值将添加到ModelState. Html 助手绑定到 vales 中ModelState,而不是模型属性的值,因此在 POST 方法中修改模型属性的值不会反映在视图中,除非您在使用设置值之前先清除模型状态

ModelState.Clear(); // clears all properties

或者

if (ModelState.ContainsKey("active"))
{
    ModelState["active"].Errors.Clear(); //clears the property 'active'
}

此答案的第二部分解释了这种行为的原因。

但是,清除ModelState应该谨慎使用,因为它也会清除验证错误,并且在任何情况下,正确的方法是遵循PRG模式

于 2015-04-28T12:04:01.867 回答