asp.net MVC 2 - '[绑定(排除= "Password" )]' 不起作用?



我正在尝试编辑用户页面,但我不想验证密码字段。 所以我在我的模型前面放了一个[绑定(排除="密码")]。 但它仍然会导致模型状态。返回 false 是有效的。谁能知道为什么会这样?

public ActionResult Edit([Bind(Exclude="Password")]User user, string selectedStatus, string password, string confirmPassword)
        {
if(ModelState.Isvalid)<---- returns false
{
///logic
}
}
此属性从

绑定中排除属性,但不从验证中排除属性。所以基本上模型绑定器永远不会给它赋值,但如果它上面有需要值的验证属性,它就不起作用。

显然,解决这个问题的解决方案是使用视图模型(顺便说一下,这是我在 SO 上回答的与 ASP.NET MVC 相关的大约 70% 的问题的解决方案)。

因此,如果您根本不想要密码字段,请不要将其包含在此视图模型中,如果您想要密码但不想进行验证,请不要使用 Required 属性装饰它。

所以代替:

public ActionResult Edit([Bind(Exclude="Password")]User user, string selectedStatus, string password, string confirmPassword)

用:

public ActionResult Edit(EditUserViewModel user)

最新更新