Asp.net mvc 2 ASP.NET MVC ModelState有效-如何从验证中排除特定属性?
我是MVC的核心人物。我有一个模特:Asp.net mvc 2 ASP.NET MVC ModelState有效-如何从验证中排除特定属性?,asp.net-mvc-2,data-annotations,Asp.net Mvc 2,Data Annotations,我是MVC的核心人物。我有一个模特: public class Usuarios { [Required(ErrorMessage = "**TxtOPID is required")] public string TxtOpID { get { return this.txt_opId; } set { this.txt_opId = value; } } [
public class Usuarios
{
[Required(ErrorMessage = "**TxtOPID is required")]
public string TxtOpID
{
get { return this.txt_opId; }
set { this.txt_opId = value; }
}
[Required(ErrorMessage="**Password is required")]
public string TxtPassword
{
get { return this.txt_password; }
set { this.txt_password = value; }
}
[Required(ErrorMessage="**Email is required")]
[RegularExpression("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*\\.([a-z]{2,4})$",ErrorMessage="**Invalid email")]
public string TxtEmail
{
get { return this.txt_email; }
set { this.txt_email = value; }
}
}
这是DataAnnotations,当我尝试使用ModelState.IsValid属性检查所有属性是否有效时,效果很好
问题是当我不想检查所有属性时。例如:
如果我只想检查TxtOPID和TxtSenha属性,比如在登录表单中,只需要OPID和密码
如何在控制器中的特定操作中排除电子邮件属性验证
我试过:
public ActionResult SignIn([Bind(Exclude="TxtEmail")]Usuarios usuario)
{
[...]
}
但它不起作用,因为它总是无效的,那个特定的表单不需要TxtEmail
有什么想法吗?不要将所有验证放在一个类中。为
登录
构建一个类,为联系人
构建另一个类,等等
基本上,每个模型都有数据注释来验证该模型。。即使你有30个不同的。您总是可以创建一个基类,并将公共属性放在其中,然后简单地从中继承
在我的情况下,我有一个登录表单,类(使用数据注释)验证“用户名”和“密码”。我还有一个“事件”表单,需要事件名称、日期、时间等。因此我有另一个类来验证事件。但是,这些类将重复它们的属性?是的,它们可以。。。例如你可以在3个不同的地方使用“电子邮件”。一个用于联系人表单,一个用于登录表单,一个用于gravatar。您将制作3个模型(登录、电子邮件、gravatar)并验证每个模型上的电子邮件属性。如果您不验证“电子邮件”的总体概念,您将验证模型以及该模型中的任何属性。这就是MVC的理念。您构建了一个模型,在多个地方使用它,并且验证是完全相同的。如果电子邮件在一个场景中有效,而在另一个场景中未验证,则该电子邮件属性具有不同的上下文,因此它需要不同的模型。@user257234-您可以始终使用继承并将公共属性放入一些有意义的基类中。另外,切换到自动属性,这将节省您键入的大量内容:公共字符串密码{get;set;}+1用于公共属性和自动属性。-爱情网4