asp.net-mvc – ModelState.IsValid不排除必需的属性
我试图排除一个必需的属性(密码),因此模型状态不会验证该属性,但由于某种原因,即使我尝试排除它,它仍然会验证.
控制器: [Authorize,AcceptVerbs(HttpVerbs.Post)] public ActionResult _Edit(int id,[Bind(Exclude = "Password")]FormCollection collection) { var user = Proxy.GetUser(id); TryUpdateModel(user,null,new[]{"Password"}); if(!ModelState.IsValid) return PartialView(user); Proxy.UpdateUser(user); } 视图: ... <tr> <td class="label"> <label class="row_description" for="Password"><%= S._("Password")%></label> </td> <td> <%= Html.Password("Password",new { @class = "row_input" })%> <%= Html.ValidationMessage("Password","*")%> </td> </tr> 用户(使用dataannotation): [Required] public string Password { get; set; } 我使用的是VS2008,MVC2,firefox 也许我只是累了,看不到它.任何帮助表示赞赏 解决方法
我目前遇到与MVC3类似的问题.
尽管我的Action中有[Bind(Exclude =“Password”)],但ModelState.IsValid仍然返回false. 我注意到TryUpdateModel(user,new string [] {“Password”});成功更新模型;但仍然是假的.然后我发现(在stackoverflow的某个地方,抱歉没有链接),TryUpdateModel实际上返回了ModelState.IsValid. 因此,问题不在于TryUpdateModel,而在于ModelState.IsValid. 注意:这也意味着您不需要两次验证…您可以使用此代码: if (!TryUpdateModel(user,new string[]{"Password"})) return PartialView(user); 因此,问题似乎是ModelState仍在验证已从FormCollection中排除的属性. 我能够通过在调用TryUpdateModel之前从ModelState中删除字段来克服这个问题: ModelState.Remove("Password"); 请注意,TryUpdateModel仍然需要根据上述代码从更新中排除属性列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 从umbraco搜索中排除节点
- asp.net – MVC3的远程模型验证操作中的参数名称
- asp.net-mvc – 将Visual Studio项目转换为ASP.NET MVC
- asp.net – UpdatePanel和ClientIDMode =“静态”的可能解决
- asp.net-mvc – 如何通过URL获取RouteData?
- 如何返回404状态,无效参数传递给我的ASP.NET MVC控制器?
- asp.net – 开始日期 – 使用Compare Validator Misfires验
- ASP.NET,jQuery,脏窗体和window.onbeforeunload
- asp.net – 回滚请求身体流
- asp.net-mvc – 仅允许来自特定电子邮件域的注册