一起谈.NET技术,ASP.NET MVC 验证方式(1)

  实现一个简单的验证(C#)

  本部分主要目的是说明如何在ASP.NET MVC应用程序中实现验证。例如,将了解如何验证一个表单提交时必填内容的合法性。了解如何应用model state和验证相关的HTML helpers。

  理解Model State

  你使用model state,更准确点说是使用model state 字典去表示验证错误。比如,列表一中的Create()方法,在产品类保存入库之前去验证产品类的属性。

  把验证和数据逻辑加到控制类中是违反编程方法的,控制类中应该仅包含程序的流程逻辑。此处是为了便于说明才这样写的。

  列表1---Controllers\ProductController.cs

代码


//
// POST: /Product/Create

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)
{
// Validation logic
if (productToCreate.Name.Trim().Length == 0)
ModelState.AddModelError("Name", "Name is required.");
if (productToCreate.Description.Trim().Length == 0)
ModelState.AddModelError("Description", "Description is required.");
if (productToCreate.UnitsInStock < 0)
ModelState.AddModelError("UnitsInStock", "Units in stock cannot be less than zero.");
if (!ModelState.IsValid)
return View();

// Database logic
try
{
_entities.AddToProductSet(productToCreate);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}

  在列表一中,产品的名称,简介,单价等属性都被验证。如果任何一个属性的验证失败,相应的错误就会被加到model state字典。

  如果在mode state中有任何一个错误,ModelState.IsValid属性都返回的是false。在这种情况下,创建一个新产品的HTML 表单将会再次被显示。否则,如果没有任何错误,新产品就被加到数据库。

  使用Helpers验证

  ASP.NET MVC 包含两个验证Helper:Html.ValidationMessage()和Html.ValidationSummary()。使用这两个方法在视图类中去显示错误信息。

  在ASP.NET MVC框架自动产生的视图中使用Html.ValidationMessage()和Html.ValidationSummary()。按照如下步骤产生Create视图:

  1. 在产品控制类右键单击Create()方法,选择Add View选项(如图一)。

  2. 在Add view对话框中,选中Create a strongly-typed view (如图2)。

  3. 从View data class下拉列表中,选择Product类。

  4. 从view content下拉列表中,选择Create.

  5. 单击add按钮。

  确保在添加视图之前重新生成解决方案,否则,在View data class下拉列表框中不会出现类的列表。

  图1:

  图2:

  在完成这些步骤之后,得到列表二的Create视图。

  列表2---views\Product\Create.aspx

代码


<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Product>" %>

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

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

<h2>Create</h2>

<%= Html.ValidationSummary() %>

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

<fieldset>
<legend>Fields</legend>
<p>
<label for="Name">Name:</label>
<%= Html.TextBox("Name") %>
<%= Html.ValidationMessage("Name", "*") %>
</p>
<p>
<label for="Description">Description:</label>
<%= Html.TextBox("Description") %>
<%= Html.ValidationMessage("Description", "*") %>
</p>
<p>
<label for="Price">Price:</label>
<%= Html.TextBox("Price") %>
<%= Html.ValidationMessage("Price", "*") %>
</p>
<p>
<label for="UnitsInStock">UnitsInStock:</label>
<%= Html.TextBox("UnitsInStock") %>
<%= Html.ValidationMessage("UnitsInStock", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>

<% } %>

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

</asp:Content>

  在列表2中,Html.ValidationSummary()被HTML表单自动调用。它被用来去显示一组验证错误信息。它显示的一个具有圆点标记的错误信息列表。

  Html.ValidationSummary()被Html表单的对应部分调用。它用来在对应表单项的右边显示一个错误信息,在列表2中的情况,如果有一个错误它就会显示*号。

  图3中,当表单中对应项为空或值无效时验证不过,提示的信息。

  验证错误出现的样式是可以修改的。

  有三个样式表类用来控制验证错误信息的样式:

  1.Input-validation-err

  2.Field-validation-error

  3.Validation-summary-errors

  可以通过修改Content文件夹下的Site.css文件来修改验证错误的样式。

  HtmlHelper类包含了只读静态属性,ValidationInputCssClassName, ValidationFieldCssClassName, and ValidationSummaryCssClassName。

  预定义绑定验证和已绑定验证

  如果你提交这个表单去创建一个新产品,输入一个无效字段,和空字段,这时你将会得到如图4所示的验证信息。这些错误信息是从哪里来的?

  图4:

  实际上验证信息有两种类型--在表单字段被绑定到类之前和之后产生的错误信息。也就是,预绑定验证错误和已绑定验证错误。

  在列表1中的Product控制器的Create()方法接受一个产品类的实列。如下所示:


public ActionResult Create([Bind(Exclude="Id")] Product productToCreate)

  Create表单中的字段值是通过model binder绑定到productToCreate类的。当它不能把表段字段的值绑定到表单属性的时候,它就会自动的把一个错误信息加到model state中。

  默认的model binder不能够把字符串“apple“绑定到产品类的价格属性上。不能把一个字符绑定到数值型属性上。因此,model biner把一个错误信息加到了model state.

  默认的model binder也不能把一个null值绑定到一个不接受null值的属性。

  如果想要自定义一些预绑定错误信息,这时需要为这些信息创建资源。

  总结:

  本部分描述了一个基本固定的ASP.NET MVC的验证方式。了解了如何使用model state和HTML helper。也讨论了预定义绑定和已绑定验证的区别。在以后部分将讨论把验证代码从控制部分转移到model部分。

时间: 2024-07-31 17:58:23

一起谈.NET技术,ASP.NET MVC 验证方式(1)的相关文章

ASP.NET MVC 验证方式(1)

实现一个简单的验证(C#) 本部分主要目的是说明如何在ASP.NET MVC应用程序中实现验证.例如,将了解如何验证一个表单提交时必填内容的合法性.了解如何应用model state和验证相关的HTML helpers. 理解Model State 你使用model state,更准确点说是使用model state 字典去表示验证错误.比如,列表一中的Create()方法,在产品类保存入库之前去验证产品类的属性. 把验证和数据逻辑加到控制类中是违反编程方法的,控制类中应该仅包含程序的流程逻辑.

一起谈.NET技术,ASP.NET MVC验证框架中关于属性标记的通用扩展方法

之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使用Data Annotation Validators方式验证的时候,如果数据库是Entityframework等自动生成的文件,就没有办法使用扩展属性标记进行标记.现在已经开始有了一些其它的Asp.net MVC 验证框架,使用上跟Data Annotation Validators差不太多,但是普遍有这样的问题,如果数据库是Entityframework生成的edm文件,没有办法进行扩展属性标记. 今天在网上发现了另外一

《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展

首先需要对xVal有点熟悉: http://www.codeplex.com/xval 建议下载最新源码而不是编译版本 再看两篇文章: http://goneale.com/2009/03/04/using-metadatatype-attribute-with-aspnet-mvc-xval- validation-framework/ 深山老林将之翻译为:<ASP.NET MVC验证框架中关于属性标记的通用扩展方法> http://www.cnblogs.com/wlb/archive/2

ASP.NET MVC验证框架中关于属性标记的通用扩展方法

之前写过一篇文章<ASP.NET MVC中的验证>,唯一的遗憾就是在使用Data Annotation Validators方式验证的时候,如果数据库是Entityframework等自动生成的文件,就没有办法使用扩展属性标记进行标记.现在已经开始有了一些其它的Asp.net MVC 验证框架,使用上跟Data Annotation Validators差不太多,但是普遍有这样的问题,如果数据库是Entityframework生成的edm文件,没有办法进行扩展属性标记. 今天在网上发现了另外一

Asp.net MVC验证那些事(1)-- 介绍和验证规则使用

原文  Asp.net MVC验证那些事(1)-- 介绍和验证规则使用 数据的有效性验证,是程序开发中必不可少的环节.这篇文章,我们将用一个实例来说明如何在MVC中使用Validation来保证无论是新增或者更新数据的时候,都必须符合我们定义的验证规则,否则就会提示错误. 一, DRY原则 DRY是Don't repeat yourself的缩写,意思是不要写重复的代码.MVC中的Validation设计就是遵循了这个原则. 比如下面中的Movie类, 当用户在网页上填写Movie信息的时候,并

Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码)

原文 Asp.net MVC验证哪些事(3)-- Remote验证及其改进(附源码) 表单中的输入项,有些是固定的,不变的验证规则,比如字符长度,必填等.但有些是动态的,比如注册用户名是否存在这样的检查,这个需要访问服务器后台才能解决.这篇文章将会介绍MVC中如何使用[RemoteAttribute]来解决这类验证需求,同时会分析[RemoteAttribute]的不足,以及改进的方法. 本文相关的源代码在这里 MVC-Remote-Validation.zip 一, RemoteAttribu

Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用

原文 Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用 上篇文章Asp.net MVC验证那些事(1)-- 介绍和验证规则使用中,介绍了Asp.net MVC中的验证功能以及如何使用.这里将对MVC中内置的验证规则进行总结. 一,查找所有验证规则 上篇文章中提到,所有的验证规则都是位于下面的命名空间下: using System.ComponentModel.DataAnnotations; 我们可以用ILSpy反编译工具,看看这个命名空间下都有些什么. 下面的图让我们一目了然,

asp.net身份验证方式介绍_实用技巧

windows身份验证: IIS根据应用程序的设置执行身份验证.要使用这种验证方式,在IIS中必须禁用匿名访问. Forms验证:用Cookie来保存用户凭证,并将 未经身份验证的用户重定向到自定义的登录页. Passport验证:通过Microsoft的集中身份验证服务执行的,他为成员站点提供单独登录 和核心配置文件服务. 一. 配置windows身份验证 1)配置IIS设置 2)设置Web.config <system.web> <authentication mode = &quo

当ASP.NET Forms验证方式遭遇苹果IOS

一.问题出现 我在用ASP.NET MVC4做微信开发的时候,用Forms验证方式做为authentication. 一般都是在web.config加: <authentication mode="Forms" > <forms loginUrl="~/Account/Login" name="webcookies"  slidingExpiration="true" timeout="30&quo