ASP.NET MVC条件验证

如何使用数据注释对模型进行条件验证?

例如,假设我们有以下模型(人员和高级):

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;

}

}

和以下视图:

<%= 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)%>

我想成为基于“ IsSenior”属性(true-> required)的选择的“

Senior.Description”属性条件必填字段。如何在带有数据注释的ASP.NET MVC 2中实现条件验证?

回答:

我已经通过处理控制器包含的“ ModelState”字典解决了这一问题。ModelState词典包含所有必须验证的成员。

解决方法如下:

如果您需要基于某个字段实施 (例如,如果A = true,则需要B),

(对于对象级别的自定义验证器则不是这样),则可以实现此目的通过处理“ ModelState”,只需从其中删除不需要的验证即可。

…在某些班级…

public bool PropertyThatRequiredAnotherFieldToBeFilled

{

get;

set;

}

[Required(ErrorMessage = "*")]

public string DepentedProperty

{

get;

set;

}

…上课继续…

…在某些控制器动作中…

if (!PropertyThatRequiredAnotherFieldToBeFilled)

{

this.ModelState.Remove("DepentedProperty");

}


这是我的最终实现:我在模型上使用了一个接口,并使用了操作属性来验证实现了上述接口的模型。接口规定了Validate(ModelStateDictionary

modelState)方法。动作属性仅在IValidatorSomething上调用Validate(modelState)。

我不想使这个答案复杂化,所以我没有提到最终的实现细节(最后,这在生产代码中很重要)。

以上是 ASP.NET MVC条件验证 的全部内容, 来源链接: utcz.com/qa/407613.html

回到顶部