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

HTML.TextBoxFor is set readonly before value set

我有以下 HTML 助手文本框:

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

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

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

感谢任何帮助,谢谢

当您 post 支持一个模型时,它的值会添加到 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 模式