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 模式
我有以下 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 模式