登峰造极的ASP.NET

ASP.NET MVC 2 版本新增的一项功能可以验证服务器和客户端的用户输入。您只需为该框架提供一些 有关要验证数据的信息,该框架将会为您处理艰巨的工作和详细信息。

对于我们这些使用 ASP.NET MVC 1.0 编写自定义验证代码和自定义模型绑定器来执行简单模型验证的 人来说,此功能可谓天赐福音。在本文中,我将探讨 ASP.NET MVC 2 中内置的验证支持。

不过,在讨论这些新功能之前,我将回顾一下旧的方法。多年来,ASP.NET WebForms 中的验证功能一 直让我非常满意。我想,回顾一下这些功能对于理解验证框架的作用非常有帮助。

控制验证

您如果用过 ASP.NET WebForms,应当会知道将验证逻辑添加到 WebForm 中相对简单。您使用控件表 示验证规则。例如,如果要确保用户在 TextBox 控件中输入特定文本,只需添加一个指向 TextBox 的 RequiredFieldValidator 控件,如下所示:

<form id="form1" runat="server">
  <asp:TextBox runat="server" ID="_userName" />
  <asp:RequiredFieldValidator runat="server" ControlToValidate="_userName"
                 ErrorMessage="Please enter a username" />
  <asp:Button runat="server" ID="_submit" Text="Submit" />
</form>

RequiredFieldValidator 将封装客户端和服务器端的逻辑以确保用户提供的是用户名。若要提供客户 端验证,该控件会将 JavaScript 发送到客户端浏览器,此脚本可确保将表单传回服务器之前用户操作满 足所有验证规则。

想想这些 WebForm 验证控件提供了什么,它们的功能的确异常强大!

可以通过声明方式为一个位置的页面表示验证规则。

如果用户操作不满足这些验证规则,客户端验证将阻止往返服务器。

服务器验证将防止恶意用户避开客户端脚本。

服务器和客户端验证逻辑保持同步,而不会成为维护问题。

但是在 ASP.NET MVC 中,您无法使用这些验证控件并继续忠实 MVC 设计模式的精神。幸运的是,此 框架的第 2 版中的一些功能甚至更好。

控件与模型

可以将 WebForm 控件(如 TextBox)视为一个简单的用户数据容器。可以用初始值填充此控件,并向 用户显示该值,也可以在回发后通过检查该控件来检索用户输入或编辑的任何值。使用 MVC 设计模式时 ,M(模型)与数据容器扮演着相同的角色。可以用需要提供给用户的信息来填充模型,它会将更新的值 回送到您的应用程序。因此,模型是表示验证规则和约束的一个理想场所。

下面是一个现成的示例。如果创建一个新的 ASP.NET MVC 2 应用程序,您将在新项目中找到一个控制 器 AccountController。该控制器负责处理新用户的注册请求,以及登录和密码更改请求。其中每个操作 都使用一个专用的模型对象。可以在 Models 文件夹中的 AccountModels.cs 文件中找到这些模型。例如 ,不带验证规则的 RegisterModel 类如下所示:

public class RegisterModel
{
  public string UserName { get; set; }
  public string Email { get; set; }
  public string Password { get; set; }
  public string ConfirmPassword { get; set; }
}

AccountController 的 Register 操作将此 RegisterModel 类的实例用作参数:

[HttpPost]
public ActionResult Register(RegisterModel model)
{
   // ...
}

时间: 2024-11-10 17:15:58

登峰造极的ASP.NET的相关文章

登峰造极的ASP.NET:文本模板转换工具包和ASP.NET MVC

Microsoft Visual Studio 包含一个称为 T4(文本模板转换工具包的缩写)的代码生成引擎.您或许 已在 Visual Studio 中使用 T4 模板,甚至还不知道这些模板已在后台工作.在本文中,我将简单介绍 T4 模板并说明 ASP.NET MVC 如何使用此项技术.同时我还会为您介绍如何自定义 T4 模板以使用 MVC 框架提高您的日常工作效率. 该模板工具包背后的基本理念是分析输入文件并将其转换为输出文件.输入文件是一个模板(文件扩 展名为 .tt 的文本文件).输出文

ASP的开发工具

 和HTML文件一样,ASP也是纯文本文件.所以,你甚至可以使用"记事本"编辑ASP文件.当然,有个专门设计的代码编辑器,可以使你的工作事半功倍. 一.Visual InterDevVisual InterDev是Microsoft为开发ASP程序专门推出的集成开发环境,功能非常强大. 1.可以对ASP代码进行颜色识别,自动完成代码.例如你输入"response."之后,VI会自动把response.的方法列举出来,供你选择. 2.VI中带有一个代码库,调用预先设计

固定表头-在ASP.NET页面中,固定DATAGRID表头出现的问题

问题描述 在ASP.NET页面中,固定DATAGRID表头出现的问题 使用DIV标签加js纯页面固定表头,实际上就是将表头获取出来填充到一个DIV中,问题就是如何将表头和表中的内容对齐,特别是在表中数据动态改变列宽不固定的时候

学ASP动态网页必备:IIS 错误代码

iis|错误|动态|网页     400 无法解析此请求.     401.1 未经授权:访问由于凭据无效被拒绝.     401.2 未经授权: 访问由于服务器配置倾向使用替代身份验证方法而被拒绝.     401.3 未经授权:访问由于 ACL 对所请求资源的设置被拒绝.     401.4 未经授权:Web 服务器上安装的筛选器授权失败.     401.5 未经授权:ISAPI/CGI 应用程序授权失败.     401.7 未经授权:由于 Web 服务器上的 URL 授权策略而拒绝访问

Oracle大文本在ASP中存取问题的解决

oracle|解决|问题 在我开发BS结构程序中,由于经常需要在ORACLE中处理一些容量较大的文本数据,所以经过反复测试终于用ASP成功解决了大文本数据在ORACLE下存取问题. 一.运行环境: 1.Microsoft Windows 2000 Server + IIS 5.0 2.Oracle8i中文标准版 二.建立数据表: CREATE TABLE SYSTEM.TEST( BLOB LONG, ID NUMBER) / 三.源程序: 1.数据存入程序:test.asp <% '表单提交处

ASP中一个字符串处理类(VBScript)

vbscript|字符串 这个类是用于处理字符串的,是老外写的,我把里面的功能和参数加了说明 使用方法: =============== test.asp================ <!--#include file="StringOperations.asp"--> <%dim strset str = New StringOperations test = str.toCharArray("check this out") respons

asp 用存储过程实现数据分页

存储过程|分页|数据 一.创建表 tiku_koushi if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tiku_koushi]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[tiku_koushi]GO CREATE TABLE [dbo].[tiku_koushi] ([id] [int] IDENTITY (1, 1)

如何用asp把sql server數據轉化為execl文件

server 1.ASP文件: <%@ LANGUAGE="VBSCRIPT" %><%option explicit%><%'EXAMPLE AS:把数据库中一个每天24小时在线人数放到一个EXCEL文件中去'AUTHOR :钢铁工人'EMAIL :hello_hhb@21cn.com'DATE :2001-3-25'TEST :在NT4,SP6,SQL SERVER 7.0,EXCEL2000中测试通过%><HTML><HEAD

在ASP中使用SQL语句之9:表单操作

语句 从某个页面表单中取出信息是ASP编程中常见的问题.但是,遍历通过表单传递的记录会花去多长时间呢?这取决于数据库的大小.简单的GUI界面都可能令循环遍历操作耗费太多的时间. 比方说,假设有个团队成员登录到GUI屏幕输入自己的名字姓氏和名字之间用点号连接:amy.cowen.这个值通过表单提交,她的当前项目列表就从数据库中取了出来并显示在屏幕上.为了快速地取出用户的记录以便显示在屏幕上,你可以编写以下代码. 假设HTML页面上包含以下代码:<FORM ACTION="login_post