如何使用数据注释对模型进行条件验证?
例如,假设我们有以下模型(Person和Senior):
public class Person
{
[Required(ErrorMessage = "*")]
public string Name
{
get;
set;
}
public bool IsSenior
{
get;
set;
}
public Senior Senior
{
get;
set;
}
}
public class Senior
{
[Required(ErrorMessage = "*")]//this should be conditional validation, based on the "IsSenior" value
public string Description
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
以下观点:
<%= Html.EditorFor(m => m.Name)%>
<%= Html.ValidationMessageFor(m => m.Name)%>
<%= Html.CheckBoxFor(m => m.IsSenior)%>
<%= Html.ValidationMessageFor(m => m.IsSenior)%>
<%= Html.CheckBoxFor(m => m.Senior.Description)%>
<%= Html.ValidationMessageFor(m => m.Senior.Description)%> …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写自己的自定义验证属性,但我遇到了一些问题.
我试图写的属性是当用户登录时,密码将与确认密码进行比较.
namespace Data.Attributes
{
public class ComparePassword : ValidationAttribute
{
public string PasswordToCompareWith { get; set; }
public override bool IsValid(object value)
{
if (PasswordToCompareWith == (string)value)
{
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是当我试图在模型文件中设置这样的属性时:
[Required]
[ComparePassword(PasswordToCompareWith=ConfirmPassword)]
public string Password { get; set; }
[Required]
public string ConfirmPassword { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误1非静态字段,方法或属性'Project.Data.Models.GebruikerRegistreerModel.ConfirmPassword.get'需要对象引用
似乎VS不接受confirmpassword该PasswordToCompareWith=ConfirmPassword部分.
我究竟做错了什么?
Bounty获奖后更新
一个新的解决方案正在解决这个问题.请参考ASP.NET MVC 3预览1:http://weblogs.asp.net/scottgu/archive/2010/07/27/introducing-asp-net-mvc-3-preview-1.aspx
查看模型验证改进部分,您将在其中看到我的问题的解决方案.
原帖
参考我之前的文章如何使用ASP.NET MVC 2验证两个属性,其中我问我如何比较模型验证的两个属性.
我确实觉得这个答案很有用,但我遇到了一个完全不同的问题:
问题:如果属性级ValidationAttribute包含错误,则不验证类级别ValidationAttributes.
请考虑以下事项:
[EqualTo("Email", "EmailConfirm", ErrorMessage = "E-mailadresserne skal være ens")]
[EqualTo("Password", "PasswordConfirm", ErrorMessage = "Adgangskoderne skal være ens")]
[Bind(Exclude="UserId")]
public class EditSiteUser
{
[Required(ErrorMessage="Du skal bekræfte adgangskode")]
public string PasswordConfirm { get; set; }
[Required(ErrorMessage="Du skal bekræfte e-mailadressen")]
[Email(ErrorMessage="Ugyldig e-mailadresse")]
public string EmailConfirm { get; set; }
public int UserId { get; set; }
[Required(ErrorMessage = "Du skal indtaste et brugernavn")]
public …Run Code Online (Sandbox Code Playgroud) validation asp.net-mvc data-annotations asp.net-mvc-3 asp.net-mvc-2
我有一个StartDate和EndDate我的SchoolEvents模型,我想知道是否有任何数据注释我可以用来验证StartDate小于或等于,EndDate并且EndDate大于或等于StartDate?
大家好我已创建自定义验证属性并将其分配给类级别验证.不幸的是,它没有被调用.我尝试各种方式,认为它可以解决问题.但是,它花了我几个小时,我发现验证机制没有调用该属性.
为了说明你,我把以下代码.
属性
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public sealed class BooleanDependencyAttribute : ValidationAttribute
{
private const string _defaultErrorMessage = "?????????{0}";
private readonly object _typeId = new object();
public string DependencyPropertyName { get; private set; }
public string DependentPropertyName { get; private set; }
public BooleanDependencyAttribute(string dependencyPropertyName, string dependentPropertyName)
: base(_defaultErrorMessage)
{
DependencyPropertyName = dependencyPropertyName;
DependentPropertyName = dependentPropertyName;
}
public override object TypeId
{
get
{
return _typeId;
}
}
public override string FormatErrorMessage(string name)
{
return String.Format(CultureInfo.CurrentUICulture, …