zoukankan      html  css  js  c++  java
  • 【转载】ASP.NET MVC 3 —— Model远程验证

    这两天找了些ASP.NET MVC3的资料小看了一下,主要看了一下MVC3.0的一些新特性已经Razor视图引擎的一些东西,发现3.0真的比之前的两个版本进步很多,在开发体验上有了大大的提高!这两天看的和尝试的东西应该是比较浅显一点的,大致的内容有如下几个方面:
    1. Model验证的新特性(主要是从RemoteAttribute特性和IClientValidatable这两个新东西进行了解和尝试使用)
    2. Razor视图引擎的使用(主要是和原来的aspx区别开来)
    3. 控制器中的新特性(早在MVC3.0的测试版本中就已经提到的“动态类型”,还有其他新特性)
    4. 对HtmlHelper对象的进一步扩展(Chart和GridView的整合)
        很明显,上面提到的前三点其实就是所谓的M-V-C了- -!。    下面讲的是Model远程验证新特性的使用:

       RemoteAttribute——远程验证特性,主要有三个方面要注意,还是M-V-C:
        Model:RemoteAttribute的使用和其他验证特性(例如RequiredAttribute)相似,直接戴在Model属性的头上就OK鸟,考虑下面这个Model
    c#代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /// <summary>
    /// 用户添加操作的模型
    /// </summary>
    public class MyUser_AddModel
    {
        #region MyRegion
        /// <summary>
        /// 用户名
        /// </summary>
        [DisplayName("登录账号")]
        [Required(ErrorMessage = "用户账号不能为空")]
        [Remote("CheckUserAccountExists", "Test", ErrorMessage = "用户账号已存在")] // 远程验证(Ajax)
        public string UserAccount { get; set; }
    }
        从上面的代码可以看到UserAccount属性上面有一个Remote特性,这个就是用于远程验证用的了,三个参数,第一个是控制器名,第二个是Action名,最后那个是验证不通过的提示文本(查看RemoteAttribute的元数据代码可以发现其实还有一个重要的参数,最完全的构造函数如下:public RemoteAttribute(string action, string controller, string areaName); 可以看到还可以指示到某个Area的。

        Control:根据上面的代码我们需要在名为”Test“的控制器中提供一个名个”CheckUserAccountExists“的Action方法,如下:
    c#代码
    1
    2
    3
    4
    5
    6
    7
    [HttpGet] // 只能用GET !!!
    public ActionResult CheckUserAccountExists(string UserAccount)
    {
        string[] existsUsers = { "youguanbumen", "wodanwojun" };
        bool exists = string.IsNullOrEmpty(existsUsers.FirstOrDefault(u => u.ToLower() == UserAccount.ToLower())) == false;
        return Json(!exists, JsonRequestBehavior.AllowGet);
    }
        这里有亮点要注意,Action必须是Get提交(Post的话无效)(订正1),返回的结果是JsonResult(不是直接返回bool值)。


        View:视图使用了Razor引擎,代码如下:
    html代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @model MvcApplication.Models.MyUser_AddModel 
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    <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>
    <fieldset>
        <legend>添加用户</legend>
        <div>
            @using(Html.BeginForm("DoAddUser","Test")){
            <p>
                @Html.LabelFor(m=>m.UserAccount):
                @Html.TextBoxFor(m=>m.UserAccount)
                @Html.ValidationMessageFor(m=>m.UserAccount)
            </p>
            <p>
                <input type="submit" value="提 交" />
            </p>
            }
        </div>
    </fieldset>
        这里注意的地方有,页面声明页面为强类型(就是上面定义的Model),引入三个必须的脚本(创建MVC3.0项目的时候自带的),使用了HtmlHelper的”*For“泛型方法。除了jquery.validate.unobtrusive.min.js这个脚本,其他的都是不是3.0中新加的东西。

        测试结果:从下面的截图我们可以看到,远程验证的效果,注意左上角(页面没有刷新)。



    补充:2011年4月18日 17:34:21
    啊~~我错了,发现有不少朋友给我发邮件或者留言说自己在尝试的时候遇到问题,这里我发个DOMO,希望能帮到大家的忙
    有需要的同学请点击下载(这个DEMO和本文实例不完全一样,不过道理一样的,看下应该就明白了)

        订正1:后来在博客园上有网友指出,其实Post也是可以的,确实如此,这里订正一下上面那句话。感谢这位朋友,实现的方法如下(这里引用网友给出的代码):
    c#代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [HttpPost]
    public ActionResult CheckName(string Name)
    {
        if (Name == "bjs007")
        {
            return Json("用户名重复", JsonRequestBehavior.AllowGet);
        }
        return Json(true, JsonRequestBehavior.AllowGet);
    }
    [Remote("CheckName","Home",HttpMethod="POST")]
    public string Name { get; set; }


  • 相关阅读:
    mysql登录时,ERROR 1045 (28000): 错误解决办法
    MySQL Workbench类型之MySQL客户端工具的下载、安装和使用
    个人推荐,比较好的MySQL客户端工具
    Spark history-server 配置 !运维人员的强大工具
    spark高级排序彻底解秘
    Spark RDD概念学习系列之rdd持久化、广播、累加器(十八)
    Spark RDD/Core 编程 API入门系列 之rdd案例(map、filter、flatMap、groupByKey、reduceByKey、join、cogroupy等)(四)
    Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)
    RDD.scala(源码)
    Spark RDD/Core 编程 API入门系列之动手实战和调试Spark文件操作、动手实战操作搜狗日志文件、搜狗日志文件深入实战(二)
  • 原文地址:https://www.cnblogs.com/fx2008/p/2280475.html
Copyright © 2011-2022 走看看