65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 IErrorDataInfo 接口进行 ASP.NET MVC 表单验证

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.78/5 (6投票s)

2009年8月13日

CPOL

1分钟阅读

viewsIcon

24734

在本文中,我将探讨一种实现验证逻辑的替代方法。我将向您展示如何使用 IErrorDataInfo 接口执行验证。

引言

我将探讨使用 ASP.NET MVC 实现验证逻辑的替代方法。我将向您展示如何使用 IErrorDataInfo 接口执行验证。

背景

我已经在 我之前的文章 中展示了如何使用 ASP.NET MVC 执行表单验证。在本文中,我将探讨一种实现验证逻辑的替代方法。

使用代码

这是 IDataErrorInfo 接口

public interface IDataErrorInfo
{
    // Properties
    string Error { get; }
    string this[string columnName] { get; }
}

我们将修改 上一篇文章,该文章实现了 IErrorDataInfo 接口。要实现 IDataErrorInfo 接口,我们必须创建一个部分类。我们的 tblComment 部分类如下所示

public partial class tblComment : IDataErrorInfo
{
    private Dictionary<string,> _errors = new Dictionary<string,>();

    partial void OnNameChanging(string value)
    {
        if (string.IsNullOrEmpty(value.Trim()))
            _errors.Add("Name", "Name is required.");
    }

    partial void OnEmailChanging(string value)
    {
        if (string.IsNullOrEmpty(value.Trim()))
            _errors.Add("Email", "Email is required.");
    }

    partial void OnMessageChanging(string value)
    {
        if (string.IsNullOrEmpty(value.Trim()))
            _errors.Add("Message", "Message is required.");
    }

    #region IDataErrorInfo Members

    public string Error
    {
        get { return string.Empty; }
    }

    public string this[string columnName]
    {
        get
        {
            if (_errors.ContainsKey(columnName))
                return _errors[columnName];
            return string.Empty;
        }
    }

    #endregion
}

需要注意的是,当 Entity Framework 生成实体类时,Entity Framework 会自动向类中添加部分方法。Entity Framework 生成与类中每个属性对应的 OnChangingOnChanged 部分方法。我们将修改我们的 UserCommentController 类,如下所示

public class UserCommentController : Controller
{
    private CommentEntities _db = new CommentEntities();

    [AcceptVerbs("GET")]
    public ActionResult UserComment()
    {
        return View(new tblComment());
    }

    [AcceptVerbs("POST")]
    public ActionResult UserComment([Bind(Exclude = "CommentID")] 
                                     tblComment commentToCreate)
    {
        // Validate
        if (!ModelState.IsValid)
            return View();

        // Add to database
        try
        {
            _db.AddTotblComment(commentToCreate);
            _db.SaveChanges();
        
            return RedirectToAction("UserComment");
        }
        catch
        {
            return View();
        }
    }
}

ASP.NET MVC 框架通过使用模型绑定器创建传递到 UserComment() 操作的 tblComment 实例。模型绑定器负责通过将 HTML 表单字段绑定到 tblComment 对象的实例来创建 tblComment 对象的一个实例。现在,我将运行该项目,它将显示用户评论视图,如下所示

摘要

在本文中,我们探讨了使用 IErrorDataInfo 接口进行 ASP.NET MVC 表单验证

© . All rights reserved.