软件下载 | 资讯教程 | 最近更新 | 下载排行 | 一键转帖 | 发布投稿
您的位置:最火下载站 > 网络编程 > ASP.NET > ASP.NET MVC 中的验证

ASP.NET MVC 中的验证

1.简单验证

在ASP.Net MVC中,验证是在Controller层,而错误呈现是在View层,Controller层是通过ModelState属性进行验证的,ModelState的状态是通过AddModelError()方法进行 添加的。

而在View层,是通过Html的辅助方法进行呈现的,这两个辅助方法分别是

Html.ValidationMessage()
Html.ValidationSummary()

Controller层的简单验证
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="CustomerId")] Customer customer)
{
if (customer.CompanyName.Length == 0)
{
ModelState.AddModelError("CompanyName", "CompanyName不能为空");
}
if (customer.EmailAddress.Length == 0)
{
ModelState.AddModelError("EmailAddress", "EmailAddress不能为空");
}
if (!ModelState.IsValid)
{
return View();
}
try
{
_entities.AddToCustomer(customer);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}


View层的Html辅助方法Html.ValidationMessage()与Html.ValidationSummary()
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication4.Models.Customer>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Create</h2>

<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>

<% using (Html.BeginForm()) {%>

<fieldset>
<legend>Fields</legend>
<p>
<label for="NameStyle">NameStyle:</label>
<%= Html.TextBox("NameStyle") %>
<%= Html.ValidationMessage("NameStyle", "*") %>
</p>
<p>
<label for="Title">Title:</label>
<%= Html.TextBox("Title") %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="FirstName">FirstName:</label>
<%= Html.TextBox("FirstName") %>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="MiddleName">MiddleName:</label>
<%= Html.TextBox("MiddleName") %>
<%= Html.ValidationMessage("MiddleName", "*") %>
</p>
<p>
<label for="LastName">LastName:</label>
<%= Html.TextBox("LastName") %>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<p>
<label for="Suffix">Suffix:</label>
<%= Html.TextBox("Suffix") %>
<%= Html.ValidationMessage("Suffix", "*") %>
</p>
<p>
<label for="CompanyName">CompanyName:</label>
<%= Html.TextBox("CompanyName") %>
<%= Html.ValidationMessage("CompanyName", "CompanyName不能为空") %>
</p>
<p>
<label for="SalesPerson">SalesPerson:</label>
<%= Html.TextBox("SalesPerson") %>
<%= Html.ValidationMessage("SalesPerson", "*") %>
</p>
<p>
<label for="EmailAddress">EmailAddress:</label>
<%= Html.TextBox("EmailAddress") %>
<%= Html.ValidationMessage("EmailAddress", "EmailAddress不能为空") %>
</p>
<p>
<label for="Phone">Phone:</label>
<%= Html.TextBox("Phone") %>
<%= Html.ValidationMessage("Phone", "*") %>
</p>
<p>
<label for="PasswordHash">PasswordHash:</label>
<%= Html.TextBox("PasswordHash") %>
<%= Html.ValidationMessage("PasswordHash", "*") %>
</p>
<p>
<label for="PasswordSalt">PasswordSalt:</label>
<%= Html.TextBox("PasswordSalt") %>
<%= Html.ValidationMessage("PasswordSalt", "*") %>
</p>
<p>
<label for="rowguid">rowguid:</label>
<%= Html.TextBox("rowguid") %>
<%= Html.ValidationMessage("rowguid", "*") %>
</p>
<p>
<label for="ModifiedDate">ModifiedDate:</label>
<%= Html.TextBox("ModifiedDate") %>
<%= Html.ValidationMessage("ModifiedDate", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>

<% } %>

<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>

</asp:Content>

如果使用Entityframework生成的Model,数据库设计时为不为空,那么生成的Model层该字段的Nullable属性就为false,即使在Controller没有做简单验证,在View层也会做是否为空的判断的。

2.使用IDataErrorInfo Interface

IDataErrorInfo接口的定义比较简单:

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

使用IDataErrorInfo Interface的步骤如下:

针对Model,创建一个Partial类
添加OnChanging和OnChanged Partial方法
实现IDataErrorInfo接口

使用IdataErrorInfo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;

namespace MvcApplication4.Models
{
public partial class Customer:IDataErrorInfo
{
private Dictionary<string, string> _errors = new Dictionary<string, string>();

partial void OnCompanyNameChanging(string value)
{
if (value.Trim().Length == 0)
{
_errors.Add("CompanyName", "CompanyName is required");
}
}

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

public string this[string columnName]
{
get
{
if (_errors.ContainsKey(columnName))
{
return _errors[columnName];
}
return string.Empty;
}
}
}
}
3.使用Data Annotation Validators

下载Data Annotations Model Binder sample ,下载地址在http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471
添加对 Microsoft.Web.Mvc.DataAnnotations.dll和System.ComponentModel.DataAnnotations.dll 的引用
在Global.asax.cs中的Application_Start()方法中配置
使用Data Annotation Validator Attributes
System.ComponentModel.DataAnnotations命名空间下包括四个属性:
Range:范围验证
ReqularExpression:正则表达式验证
Required:必须验证
StringLength:字符串长度验证
Validation:这是所有验证属性的基类。
使用Data Annotation Validators
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication4.Models
{
public class Test
{
public int Id { get; set; }

[Required]
[StringLength(10)]
public string Name { get; set; }

[Required]
public string Description { get; set; }

[DisplayName("Price")]
[Required]
[RegularExpression(@"^\$?\d+(\.(\d{2}))?$")]
public decimal UnitPrice { get; set; }

}
}


作者:深山老林 博客:http://wlb.cnblogs.com/
    相关阅读
    栏目导航
    推荐软件