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





3.00/5 (1投票)
在本文中,我将探讨一种使用 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 生成与类中每个属性对应的 OnChanging
和 OnChanged
部分方法。 我们将修改我们的 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 表单验证。