HTML.TextBoxFor在值设置之前设置为只读

时间:2015-04-24 17:41:10

标签: asp.net-mvc html-helper readonly html.textboxfor

我有以下HTML帮助文本框:

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

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

就像在渲染模型的值之前设置readonly一样。

感谢任何帮助,谢谢你

1 个答案:

答案 0 :(得分:0)

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

ModelState.Clear(); // clears all properties

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

this answer的第二部分解释了这种行为的原因。

但是,应谨慎使用ModelState,因为它也会清除验证错误,并且无论如何正确的方法是遵循PRG模式