【问题标题】:What is the better way/place for validation?验证的更好方法/地点是什么?
【发布时间】: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


    【解决方案1】:

    asp.net 网站提供了三种情况的指导:

    在做出任何决定之前,这些内容可能值得一读。

    【讨论】:

      【解决方案2】:

      绝对值得一读各种选项 - 选择您认为最适合您的需求和风格的选项。

      但是,您几乎可以肯定最终会在某个时候在您的服务上创建一个验证函数来处理业务规则,所以这可能是决胜局:-)

      这里有一些额外的链接也可能有用:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 1970-01-01
        • 2011-11-02
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多