Ale*_* Dn 5 validation asp.net-mvc
使用.NET MVC和代码优先EF来实现所请求的功能.业务对象相对复杂,我System.ComponentModel.DataAnnotations.IValidatableObject用来验证业务对象.
现在我试图找到方法,如何使用MVC ValidationSummary显示业务对象的验证结果,而不使用数据注释.例如(非常简化):
业务对象:
public class MyBusinessObject : BaseEntity, IValidatableObject
{
public virtual IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
return Validate();
}
public IEnumerable<ValidationResult> Validate()
{
List<ValidationResult> results = new List<ValidationResult>();
if (DealType == DealTypes.NotSet)
{
results.Add(new ValidationResult("BO.DealType.NotSet", new[] { "DealType" }));
}
return results.Count > 0 ? results.AsEnumerable() : null;
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的MVC控制器中我有这样的事情:
public class MyController : Controller
{
[HttpPost]
public ActionResult New(MyModel myModel)
{
MyBusinessObject bo = GetBoFromModel(myModel);
IEnumerable<ValidationResult> result = bo.Validate();
if(result == null)
{
//Save bo, using my services layer
//return RedirectResult to success page
}
return View(myModel);
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中,我有Html.ValidationSummary();.
我怎样才能传递IEnumerable<ValidationResult>到ValidationSummary?
我试图通过谷歌搜索找到答案,但我发现的所有示例都描述了如何使用模型中的数据注释而不是在Business对象中显示验证摘要.
谢谢
Dan*_*nex 12
在模型中添加属性,比如BusinessError
在视图中执行以下操作
@Html.ValidationMessageFor(model => model.BusinessError)
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器中出现错误时执行以下操作
ModelState.AddModelError("BussinessError", your error)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5041 次 |
| 最近记录: |