将指定的属性从模型发送到视图。
前一段时间,我的User
模型如下:
public int Id { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
除了Id
,Email
和Password
之外,用户还有更多属性,但在此之前,我没有使用它,因为此模型的唯一提议是对某人进行身份验证我的申请。
时间过去了,现在我必须在我的应用程序中添加一个新用户。为此,我将User
的模型增强为:
public int Id { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string Firstname { get; set; }
[Required]
public string Lastname { get; set; }
从那时起,我无法再登录了 - ModelState.IsValid
返回False
而不是True
。
我 猜测 问题显而易见:Firstname
和Lastname
是Required
属性,我正在发送什么都没有。
基于以上情况,我不得不问:有不一种方法可以为不同的提案使用相同的模型?或者,如果你想:有两种方法可以使用相同的模型吗?我的意思是,我需要相同的模型来创建用户和验证用户我确实需要将IsValid
属性的值设置为true
,就像前一段时间一样。
答案 0 :(得分:2)
(这不起作用)您是否尝试过使用BindAttribute:
public ActionResult Add([Bind(Include = "Id,Email,Password") ]User userModel .....
您也可以使用它来排除属性。
我坚持认为,绑定模型非常适合确保在提交的模型上只设置某些属性,但它们对ModelState没有帮助,而ModelState仍然包含使其无效的错误。 解决方案:
方法2和3可能是一种矫枉过正,特别是方法2,但我觉得我应该在使用Bind属性引导你走错路之后做出贡献:)
答案 1 :(得分:1)
您可以创建一个仅封装要在视图中使用的属性的ViewModel。
public class UserViewModel
{
public int Id { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
如果您的视图与您的商家/域对象不一一对应,ViewModel会很有帮助。对于除CRUD视图之外的所有内容通常都是这种情况。