我遇到了与此相关问题类似的问题: mvc 4 textbox not updating on postback
因为我想要比#34更有针对性,所以"我使用ModelState.Remove("propertyname")
代替只影响模型中的特定值。
然而,即使这对我想要的东西来说太广泛了,因为这会删除可能已经为此属性产生的任何验证信息等。
如何在不丢失所有其他有用状态信息的情况下更新特定的回发值?
以下代码显示当前行为(以粗体显示不需要的行为):
型号:
public class TestViewModel
{
[StringLength(7, ErrorMessage = "{0} must be less than {1} characters")]
public string A { get; set; }
}
动作:
public ActionResult Test(TestViewModel model)
{
if(model.A == "remove" || model.A == "removelong")
{
ModelState.Remove("A");
}
model.A = "replacement";
return View(model);
}
查看:
@model TestNamespace.TestViewModel
@{ Layout = null; }
<!DOCTYPE html>
<html>
<head></head>
<body>
<form>
@Html.ValidationMessageFor(m=>m.A)
@Html.TextBoxFor(m => m.A)
</form>
</body>
</html>
这有用的一些例子:
答案 0 :(得分:0)
没有明确的方法可以做到这一点,因为在99%的情况下这是一个X-Y问题(例如,想要这样做的原因是有缺陷的)。
但是,如果您真的想这样做,可以使用以下内容而不是Model.Remove("propertyName")
来执行此操作:
ModelState propertyState = ModelState["propertyName"];
if (propertyState != null)
{
propertyState.Value = null;
}
或其他形式
ModelState propertyState;
if (ModelState.TryGetValue("propertyName"))
{
propertyState.Value = null;
}