kma*_*ton 5 c# asp.net-mvc hidden-field asp.net-mvc-4 html.hiddenfor
我在ViewModel类中有这个属性:
public bool AreSimilarEntitiesChecked { get; set; }
在我的控制器中,我将其值设置为"true"并返回带有模型的View:
model.AreSimilarEntitiesChecked = true;
return View(model).WithWarning("Check the similar mentors before saving!");
Run Code Online (Sandbox Code Playgroud)
在我的视图中有一个表单,我放置了这个属性的隐藏字段:
@Html.HiddenFor(m => m.AreSimilarEntitiesChecked)
Run Code Online (Sandbox Code Playgroud)
在View返回包含AreSimilarEntitiesChecked的模型后,其值保持为False desipte我在控制器中设置了True值.
我不知道它有什么问题.
生成的HTML:
<input name="AreSimilarEntitiesChecked" id="AreSimilarEntitiesChecked"
type="hidden" value="False" data-val-required="The AreSimilarEntitiesChecked
field is required." data-val="true">
Run Code Online (Sandbox Code Playgroud)
我无法确定这是你问题中的问题,但我敢打赌它是很多钱......
ModelState保留视图模型数据表示的MVC 优先从POST数据中提取值,而不是从绑定模型中获取它们.也就是说,如果HTTP POST包含一个名为(不区分大小写)AreSimilarEntitiesChecked的字段False,那么在渲染视图时,在viewmodel中将该属性设置为什么并不重要.ModelState将POSTed值更改为viewmodel值.
这种奇怪行为的原因是,假设你有一个字段,用户应该输入一个整数,然后他们写"香蕉".这将发送到服务器进行验证,但失败.我们想再次渲染视图,"banana"仍然在字段中,并且消息不是整数.但是如果视图优先呈现视图模型的数据,则这是不可能的,因为"banana"不是整数并且不能放在该viewmodel字段中.因此保留了POST值.
有两种方法可以解决这个问题.您可以特别为此字段修复它:
ModelState.Remove("AreSimilarEntitiesChecked");
Run Code Online (Sandbox Code Playgroud)
或核选项:
ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)
有关此行为的更多信息,请访问:http://weblog.west-wind.com/posts/2012/Apr/20/ASPNET-MVC-Postbacks-and-HtmlHelper-Controls-ignoring-Model-Changes
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |