【发布时间】:2009-04-24 16:37:51
【问题描述】:
在我的 asp.net mvc 应用程序中,我有服务层,它与业务对象一起操作,将其传递到存储库层并返回到控制器。不,我无法决定我需要在哪里验证对象。第一名——在业务对象类中使用带有组件模型注解属性的数据注解验证,例如:
[AcceptVerbs("POST")]
public ActionResult Edit(Source src)
{
if(!ModelState.IsValid){
return View("EditSource", src);
_sourceService.SaveSource(src);
return RedirectToAction("Index");
}
[MetadataType(typeof(Source.MetaSource))]
public class Source
{
private class MetaSource
{
[Required]
public string Name { set; get; }
[Required]
public string Url { set; get; }
}
public int? ID { set; get; }
public string Name { set; get; }
public string Url { set; get; }
public Source()
{
ID = null;
}
第二种方式 - 验证服务层中的对象,通过将验证字典传递给服务层,例如:
[AcceptVerbs("POST")]
public ActionResult Edit(Source src)
{
if (!_sourceService.ValidateSource(src)){
return View("EditSource", src);
_sourceService.SaveSource(src);
return RedirectToAction("Index");
}
public bool ValidateSource(Source srcToValidate)
{
if (string.IsNullOrEmpty(srcToValidate.Name))
_validationDictionary.AddError("Name", "Name is required.");
else
if (srcToValidate.Name.Trim().Length == 0)
_validationDictionary.AddError("Name", "Name is required.");
if (string.IsNullOrEmpty(srcToValidate.Url))
_validationDictionary.AddError("Url", "Url is required.");
else
if (srcToValidate.Url.Trim().Length == 0)
_validationDictionary.AddError("Url", "Url is required.");
return _validationDictionary.IsValid;
}
我想创建客户端验证,并为验证错误添加本地化,我还需要创建自定义规则来调用数据库等。这两种方式的优缺点是什么,或者我需要选择另一种方式?
【问题讨论】:
标签: c# asp.net asp.net-mvc validation