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

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

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (1投票)

2009年8月16日

CPOL
viewsIcon

28126

在本文中,我将探讨一种使用 IDataErrorInfo 接口实现表单验证逻辑的替代方法。

引言

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

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

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

public partial class tblComment : IDataErrorInfo
{
    private Dictionary<string, string> _errors = new Dictionary<string, 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 对象的一个实例。 现在,我将运行该项目,它将显示用户评论视图,如下所示

摘要

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

© . All rights reserved.