加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ModelState.IsValid不排除必需的属性

发布时间:2020-12-16 00:03:22 所属栏目:asp.Net 来源:网络整理
导读:我试图排除一个必需的属性(密码),因此模型状态不会验证该属性,但由于某种原因,即使我尝试排除它,它仍然会验证. 控制器: [Authorize,AcceptVerbs(HttpVerbs.Post)] public ActionResult _Edit(int id,[Bind(Exclude = "Password")]FormCollection collection
我试图排除一个必需的属性(密码),因此模型状态不会验证该属性,但由于某种原因,即使我尝试排除它,它仍然会验证.

控制器:

[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仍然需要根据上述代码从更新中排除属性列表.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读