后台去验证,这太费资源了,毕竟恶意攻击者和 JavaScript被屏蔽的浏览器只是少数。所以,在数据被送到后台前,我们应该先进行一遍验证,这样可以节约很多资源。
下面,我们使 用ASP.NET AJAX框架完成客户端的数据验证。
说实话,在ASP.NET MVC中使用ASP.NET AJAX或JQuery实在太方便了,不信你展开Scripts 文件夹,看到没,微软已经把这些库放到里面了,所以,我们要做的只是直接引用。看我们修改后的Release.aspx。
Release.aspx:
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Release.aspx.cs" Inherits="MVCDemo.Views.Announce.Release" %>
2<%@ Import Namespace="MVCDemo.Models.Entities" %>
3
4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6<html xmlns="http://www.w3.org/1999/xhtml" >
7<head runat="server">
8 <title></title>
9 <script type="text/javascript" src="<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") % >"></script>
10 <script type="text/javascript" src="<%= Url.Content ("~/Scripts/MicrosoftAjaxValidate.js") %>"></script>
11</head>
12<body>
13 <% SelectList categories = ViewData["Categories"] as SelectList; %>
14 <div>
15 <h1>MVC公告发布系统——发布公告</h1>
16 <% Html.BeginForm ("DoRelease","Announce",FormMethod.Post); %>
17 <dl>
18 <dt>标 题:</dt>
19 <dd><%= Html.TextBox("Title") %></dd>
20 <dd><span id="TitleValidator"></span></dd>
21 <dt>分类: </dt>
22 <dd><%= Html.DropDownList("Category",categories) %></dd>
23 <dd></dd>
24 <dt>内容:</dt>
25 <dd><%= Html.TextArea("Content") %></dd>
26 <dd><span id="ContentValidator"></span></dd>
27 </dl>
28 <input id="Submit" type="submit" value="发布" />
29 <% Html.EndForm(); %>
30 </div>
31</body>
32</html>
改动有两处,首先我们在页头引用了两个js文件,第一个是 ASP.NET AJAX的库文件,第二个就是我们一会要实现的包含验证代码的js文件了。你可能注意到那个Url.Content了,Url是ViewPage的一个对 象,它最常用的一个方法就是Content,它的功能是返回某个文件的路径。一般情况下,在使用了ASP.NET MVC后,目录结构变得有点诡异,像 js、css、图片等与路径(即使是相对路径)引用相关的地方可能会出现问题,但是,只要你在这些地方用Url.Content生成路径,而不是直接 将路径写在页面里,一般就没什么问题了。所以,凡是引用js、css、图片等除,请一定使用Url.Content生成路径,其参数只有一个,就是文 件原始的相对路径。
下一个改动就是显示错误信息的span不再是Html. |