我有一个ASP.NET MVC页面,其中包含一个项目列表......
//a vague representation
Model.someValue[0] Model.someHiddenValue[0]
Model.someValue[1] Model.someHiddenValue[1]
Model.someValue[2] Model.someHiddenValue[2]
所有字段都是可选字段,但它们确实有一些验证,我正在显示验证消息。
问题是,当我提交一次并返回原始视图而不是重定向时,隐藏字段没有获得新值,但是它们的新值是在传递给视图的视图模型中。
我认为ModelState可能会覆盖模型作为验证的一部分。我知道我可以进行重定向并绕过问题,但我希望能够保存部分表单并显示其余的验证错误。如果没有其他解决方案,我将简单地验证整个表单,并且仅在所有项目都有效时保存。
答案 0 :(得分:2)
如果ModelState中存在值,它会显示它们而不是模型中的值,因为它们代表用户提供的“最后”已知状态。
如果您实际上并未打算让用户重新进行编辑,则应清除ModelState。
答案 1 :(得分:0)
你试过这个吗?:
var newValue = new ValueProviderResult("value", "value", System.Globalization.CultureInfo.CurrentUICulture);
ModelState.SetModelValue("someHiddenValue", newValue);