• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC3.0新特性之Model

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

asp.net mvc 之 asp.net mvc 3.0 新特性之 Model:

  • 通过 Data Annotations 与 jQuery 的结合实现服务端和客户端的双重验证
  • 双重验证中,使客户端实现远程的异步验证
  • 自定义 Data Annotations 与 jQuery,以实现自定义的双重验证

示例
1、Model 中通过 Data Annotations 与 jQuery 的结合实现服务端和客户端的双重验证
Web.config

<configuration>
    <!--
        要实现服务端和客户端的双重验证,需要做如下配置,因为双重验证中的客户端验证需要依赖此配置
    -->
    <appSettings>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
    </appSettings>
</configuration>


User.cs

/*
 * 在 asp.net mvc 3.0 中支持通过 Data Annotations 来实现服务端和客户端的双重验证,需要 jQuery 的支持
 * 所有 Data Annotations 相关的 Attribute 直接用类视图看 System.ComponentModel.DataAnnotations 就行了,详细说明以前写过好多遍了,这里就不重复了
 * 另外 System.Web.Mvc 下有一些新增的 Data Annotations
 */
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
 
namespace MVC30.Models
{
    public class User
    {
        public int ID { get; set; }
         
        [DisplayName("名字")]
        [Required(ErrorMessage = "名字不能为空")]
        public string Name { get; set; }
 
        [DisplayName("密码")]
        [Required(ErrorMessage = "密码不能为空")]
        public string Password { get; set; }
 
        [DisplayName("确认密码")]
        [Required(ErrorMessage = "确认密码不能为空")]
        [Compare("Password", ErrorMessage="两次密码输入不一致")]
        public string ConfirmPassword { get; set; }
 
        public DateTime DateOfBirth { get; set; }
 
        // 请求时,允许此字段包含 HTML 标记
        [AllowHtml]
        public string Comment { get; set; }
    }
}


ValidationDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MVC30.Models;
 
namespace MVC30.Controllers
{
    public class ValidationDemoController : Controller
    {
        // 用于演示通过 Data Annotations 实现服务端和客户端的双重验证
        public ActionResult Validation_DataAnnotations()
        {
            var user = new User { ID = 1, Name = "webabcd", DateOfBirth = new DateTime(1980, 2, 14), Comment = "<b>mvp</b>" };
 
            return View(new User());
        }
 
        [HttpPost]
        public ActionResult Validation_DataAnnotations(User user)
        {
            return View(user);
        }
    }
}


Validation_DataAnnotations.cshtml

@model MVC30.Models.User
            
@{
    ViewBag.Title = "Validation_DataAnnotations";
}
 
<h2>ClientValidation</h2>
 
<!--
    通过 jQuery 实现客户端验证的逻辑,需要引用此 js
-->
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<!--
    服务端验证与客户端验证的一一对应需要引用此 js
-->
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
 
@*
在 MVC3 中实现客户端验证,不需要添加以下代码
@{ Html.EnableClientValidation(); }
*@
 
@using (Html.BeginForm())
{
    <fieldset>
        <legend>User</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
            (测试方法:空着文本框,然后提交)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}



2、Model 中通过 Data Annotations 与 jQuery 的结合实现服务端和客户端的双重验证,其中客户端可以实现远程的异步验证
User.cs

/*
 * System.Web.Mvc.Remote(string action, string controller) - 让客户端可以通过 ajax 的方式远程验证
 *     action - 实现验证逻辑的 action,即处理客户端的异步请求的 action
 *     controller - 实现验证逻辑的 controller,即处理客户端的异步请求的 controller
 */
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
 
namespace MVC30.Models
{
    public class User
    {
        public int ID { get; set; }
         
        [DisplayName("名字")]
        [Required(ErrorMessage = "名字不能为空")]
        [Remote("CheckUserNameExists", "ValidationDemo", ErrorMessage = "名字已存在")]
        public string Name { get; set; }
 
        [DisplayName("密码")]
        [Required(ErrorMessage = "密码不能为空")]
        public string Password { get; set; }
 
        [DisplayName("确认密码")]
        [Required(ErrorMessage = "确认密码不能为空")]
        [Compare("Password", ErrorMessage="两次密码输入不一致")]
        public string ConfirmPassword { get; set; }
 
        public DateTime DateOfBirth { get; set; }
 
        // 请求时,允许此字段包含 HTML 标记
        [AllowHtml]
        public string Comment { get; set; }
    }
}


ValidationDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
using MVC30.Models;
 
namespace MVC30.Controllers
{
    public class ValidationDemoController : Controller
    {
        // 用于演示客户端的远程 ajax 异步验证
        public ActionResult Validation_Remote()
        {
            var user = new User { ID = 1, Name = "webabcd", DateOfBirth = new DateTime(1980, 2, 14), Comment = "<b>mvp</b>" };
 
            return View(new User());
        }
 
        [HttpPost]
        public ActionResult Validation_Remote(User user)
        {
            return View(user);
        }
 
        // 用于处理客户端的异步请求,测试时请使用字符串“webabcd”
        [HttpGet]
        public ActionResult CheckUserNameExists(string name)
        {
            return Json(name != "webabcd", JsonRequestBehavior.AllowGet);
        }
    }
}


Validation_Remote.cshtml

@model MVC30.Models.User
            
@{
    ViewBag.Title = "Validation_Remote";
}
 
<h2>ClientValidation</h2>
 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
 
@using (Html.BeginForm())
{
    <fieldset>
        <legend>User</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
            (测试方法:在文本框中输入“webabcd”)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}



3、Model 中使用更多的 Data Annotations 以及实现自定义的 Data Annotations 和自定义 jQuery 的相关逻辑
User.cs

/*
 * 如何使用更多的 Data Annotation
 *     1、在“Tools”中选择“Extension Manager”(安装 NuGet 后会有此选项)
 *     2、搜索“DataAnnotationsExtensions”,然后安装“DataAnnotationsExtensions.MVC3”项目
 *     3、之后就可以使用此项目所支持的多个新的 Data Annotation
 * 如何自定义 Data Annotation
 *     详见:IntegerAttribute.cs
 */
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
 
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
 
namespace MVC30.Models
{
    public class User
    {
        public int ID { get; set; }
         
        [DisplayName("名字")]
        [Required(ErrorMessage = "名字不能为空")]
        [Remote("CheckUserNameExists", "ValidationDemo", ErrorMessage = "名字已存在")]
        public string Name { get; set; }
 
        [DisplayName("密码")]
        [Required(ErrorMessage = "密码不能为空")]
        [Integer(ErrorMessage = "密码必须是整型")]
        public string Password { get; set; }
 
        [DisplayName("确认密码")]
        [Required(ErrorMessage = "确认密码不能为空")]
        [Compare("Password", ErrorMessage="两次密码输入不一致")]

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap