mvc 前端校验

首先解决 Ajax.BeginFor异步提交表单,给表单添加样式的问题。不能直接用class属性,网上找了很多都是用ClassName,经过测试不管用,看源代码发现生成的是ClassName而非class,其实很简单,加一个@符号即可,即@class="";

我们知道,LabelFor是不能添加class样式的,这个需自行拓展,反编译后自行拓展了一个给LabelFor添加样式的方法,代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Linq.Expressions;
 7
 8 namespace System.Web.Mvc
 9 {
10     public static class MyLabelExtensions
11     {
12         public static MvcHtmlString MyLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string className)
13         {
14             return LabelHelper(html, ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData), ExpressionHelper.GetExpressionText(expression), className);
15         }
16
17         private static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string className = "")
18         {
19             string txtLabel = metadata.DisplayName ??
20                               (metadata.PropertyName ?? htmlFieldName.Split(new char[] {‘,‘}).Last<string>());
21             if (string.IsNullOrEmpty(className))
22             {
23                 return MvcHtmlString.Empty;
24             }
25             TagBuilder tagBuilder = new TagBuilder("label");
26             tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
27             tagBuilder.Attributes.Add("class", className);
28             tagBuilder.SetInnerText(txtLabel);
29             return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
30         }
31     }
32 }

先看效果:

前端JS代码:

@{
    Layout = null;
}
@model MvcApp.DataTable.Controllers.MyTest
<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    <link href="../../JQueryValidate/assets/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <link href="../../JQueryValidate/style.css" rel="stylesheet" type="text/css" />
    <script src="../../JQueryValidate/assets/js/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script src="../../JQueryValidate/assets/js/jquery.validate.js" type="text/javascript"></script>
    <script type="text/javascript" language="javascript" charset="gb2312">
        $(document).ready(function() {
            $(‘#contact-form‘).validate({
                rules: {
                    Name: {
                        minlength: 2,
                        required: true,
                        remote: {
                            url: "/Home/GetSameNameCount/",
                            type: "post",
                            data: {
                                Name: function () {
                                    return $(‘#Name‘).val();
                                }
                            }
                        }
                    },
                    Email: {
                        required: true,
                        email: true
                    },
                    Subject: {
                        minlength: 2,
                        required: true
                    },
                    Password: {
                        required: true,
                        minlength: 5
                    },
                    Password2: {
                        required: true,
                        minlength: 5,
                        equalTo: "#Password"
                    },
                    Address: {
                        minlength: 2,
                        required: true
                    }
                },
                messages: {
                    Name: {
                        minlength: "请输入长度至少2位",
                        required: "名称必须的必!",
                        remote: "姓名已存在,请输入其他名称"
                    },
                    Email: {
                        required: "请输入邮箱地址",
                        email: "邮箱格式有误,请仔细检查"
                    },
                    Subject: {
                        minlength: "请输入长度至少2位",
                        required: "Must Write Subject Please"
                    },
                    Password: {
                        required: "请输入密码",
                        minlength: "密码长度至少为5位数"
                    },
                    Password2: {
                        required: "请再次输入密码",
                        minlength: "密码长度至少为5位数",
                        equalTo: "两次密码输入不一致"
                    },
                    Address: {
                        minlength: "请输入长度至少2位",
                        required: "消息不能为空撒"
                    }
                },
                highlight: function (element) {
                    $(element).closest(‘.control-group‘).removeClass(‘success‘).addClass(‘error‘);
                },
                success: function (element) {
                    element
			.text(‘OK!‘).addClass(‘valid‘)
			.closest(‘.control-group‘).removeClass(‘error‘).addClass(‘success‘);
                }
            });
        });

        function afterSave() {

        }
    </script>
</head>
    <body>
        @using (Ajax.BeginForm("SetRecord", "Home", new AjaxOptions { UpdateTargetId = "ajaxResult", HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnSuccess = "afterSave" }, new { id = "contact-form", @class = "form-horizontal" }))
        {
            <div class="control-group">
                @Html.MyLabelFor(model => model.Name, "control-label")
                <div class="controls">
                    @Html.TextBoxFor(model => model.Name, new { @class="input-xlarge" })
                </div>
            </div>
            <div class="control-group">
                @Html.MyLabelFor(model => model.Email, "control-label")
                <div class="controls">
                    @Html.TextBoxFor(model => model.Email, new { @class="input-xlarge" })
                </div>
            </div>
            <div class="control-group">
                @Html.MyLabelFor(model => model.Subject, "control-label")
                <div class="controls">
                    @Html.TextBoxFor(model => model.Subject, new { @class="input-xlarge" })
                </div>
            </div>
            <div class="control-group">
                @Html.MyLabelFor(model => model.Password, "control-label")
                <div class="controls">
                    @Html.TextBoxFor(model => model.Password, new { @class = "input-xlarge", type = "password" })
                </div>
            </div>
            <div class="control-group">
                @Html.MyLabelFor(model => model.Password2, "control-label")
                <div class="controls">
                    @Html.TextBoxFor(model => model.Password2, new { @class = "input-xlarge", type = "password" })
                </div>
            </div>
            <div class="control-group">
                @Html.MyLabelFor(model => model.Address, "control-label")
                <div class="controls">
                    <textarea class="input-xlarge" name="Address" id="Address" rows="3"></textarea>
                </div>
            </div>
            <div class="form-group">
                @Html.MyLabelFor(model => model.Sex, "control-label")
                    
                @Html.DropDownListFor(model => model.Sex, new SelectList(ViewBag.SexList, "strKey", "strValue", 1), "--请选择--", new { style = "width: 280px;" })
            </div>
            <div class="form-actions">
                <button type="submit" class="btn btn-primary">提交</button>
                <button type="reset" class="btn">重置</button>
            </div>
        }
    </body>
</html>

  后台C#代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using System.Runtime.Serialization;
 7 using System.ComponentModel;
 8
 9 namespace MvcApp.DataTable.Controllers
10 {
11     public class HomeController : Controller
12     {
13         //
14         // GET: /Home/
15
16         public ActionResult Index()
17         {
18             ViewBag.SexList = new List<KeyValue>
19             {
20                 new KeyValue("0","男"),new KeyValue("1","女")
21             };
22             return View();
23         }
24
25         [HttpPost]
26         public ActionResult SetRecord(MyTest t)
27         {
28             string m = t.Name;
29             return Content("ok");
30         }
31
32         [HttpPost]
33         public ActionResult GetSameNameCount()
34         {
35             string Name = Request["Name"];
36             bool isExistName = true;//验证通过
37             if (Name == "huangzhong")
38             {
39                 isExistName = false;//用户名已存在,验证不通过
40             }
41             System.Web.Script.Serialization.JavaScriptSerializer javascriptserializer = new System.Web.Script.Serialization.JavaScriptSerializer();
42             return Content(javascriptserializer.Serialize(isExistName));
43         }
44     }
45     [DataContract]
46     public class MyTest
47     {
48         [DataMember]
49         [DisplayName("姓名")]
50         public string Name { get; set; }
51         [DataMember]
52         [DisplayName("邮箱")]
53         public string Email { get; set; }
54         [DataMember]
55         [DisplayName("主题")]
56         public string Subject { get; set; }
57         [DataMember]
58         [DisplayName("地址")]
59         public string Address { get; set; }
60         [DataMember]
61         [DisplayName("密码")]
62         public string Password { get; set; }
63         [DataMember]
64         [DisplayName("确认密码")]
65         public string Password2 { get; set; }
66         [DataMember]
67         [DisplayName("性别")]
68         public string Sex { get; set; }
69     }
70
71     public class KeyValue
72     {
73         public string strKey { get; set; }
74         public string strValue { get; set; }
75         public KeyValue(string iv, string it)
76         {
77             this.strKey = iv;
78             this.strValue = it;
79         }
80     }
81 }

mvc 前端校验

时间: 2024-10-13 01:14:06

mvc 前端校验的相关文章

MVC数据校验

MVC数据校验 1.前端: 方案一: js校验,非本章重点:就不提了. 方案二: jquery.validate.js 重点 实例: 2.后端: 方案一: 特性法 实例: 方案二: ModelState 实例:

3.ASP.NET全栈开发之前端校验(基于Vue的自定义校验)自实现小型验证框架

前面分享了两篇关于.NET的服务端校验的文章,在系统里光有服务端校验虽然能够勉强使用,但会出现许多不愉快的体验,如上一章我在最后提交的时候填写了3个表单,在仅有最后一个表单出现了错误的时候,虽然达到了校验功能,表明了错误,但我前面三个表单的数据都被干掉了啊.再则比如注册的时候我填了那么多东西,我提交后你却告诉我已经被注册了,如果不是真爱,大概会毫不留情的Alt+F4 再也不见啦. 为了解决这个问题,我们必须在系统中采用双校验,前端校验那么多,咱们ASP.NET MVC创建时默认会引入jquery

Spring MVC数据校验

在web应用程序中,为了防止客户端传来的数据引发程序异常,常常需要对 数据进行验证.输入验证分为客户端验证与服务器端验证.客户端验证主要通过JavaScript脚本进行,而服务器端验证则主要通过Java代码进行验证.   为了保证数据的安全性,一般情况下,客户端和服务器端验证都是必须的 1.导入jar包 SpringMVC支持JSR(Java Specification Result,Java规范提案)303-Bean Validation数据验证规范.而该规范的实现者很多,其中较常用的是Hib

spring mvc 数据校验

1.需要导入的jar包: slf4j-api-1.7.21.jar validation-api-1.0.0.GA.jar hibernate-validator-4.0.1.GA.jar 2.访问页面编码: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath();

MVC之校验

MVC校验 首先要在Models中创建几个属性 例子:Id.UserName.Age属性.然后创建控制器,然后添加一个试图,选择强类型,选择支架模板Create生成页面,然后将所有控件改为TextBox,这样方便.添加校验包,由于验证是基于JqueryValidate插件的验证,所以最后还需要在页面上添加JS插件包的引用最后在Models中[Required], [StringLength], [Range], 和 [RegularExpression] 这几种校验方法 [HttpGet] pu

转:ASP.Net MVC:校验、AJAX与过滤器

原文地址:http://blog.jobbole.com/85005/ 一.校验 — 表单不是你想提想提就能提 1.1 DataAnnotations(数据注解) 位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证.这些特性用于定义常见的验证模式,例如范围检查和必填字段.而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效. 通过为模型类增加数据描

Spring MVC 参数校验

转自:http://blog.csdn.net/eson_15/article/details/51725470 这一篇博文主要总结一下springmvc中对数据的校验.在实际中,通常使用较多是前端的校验,比如页面中js校验,对于安全要求较高的建议在服务端也要进行校验.服务端校验可以是在控制层conroller,也可以是在业务层service,controller校验页面请求的参数的合法性,在服务端控制层conroller的校验,不区分客户端类型(浏览器.手机客户端.远程调用):service层

Spring MVC前端与后端5种ajax交互方式

前端ajax与后端Spring MVC控制器有以下五种数据交互方式.(前台使用了dhtmlxGrid,后端使用了fastjson) 方式一  通过URL传参 通过URL挂接参数,如/auth/getUser?userid='6' 服务器端方法可编写为:getUser(String userid),也可新增其他参数如HttpSession, HttpServletRequest,HttpServletResponse,Mode,ModelAndView等. 方式二  单值传参 前台调用如: aja

5.ASP.NET全栈开发之在Vue中使用前端校验(二)

在全栈开发系列第三篇的时候有讲到使用Vue进行前端验证.在那一篇博文里,详细讲了如何搭建 vuefluentvalidator.js 的过程,并最终把它从需要(实体和实体验证器)到 直接使用,很显然,它很小巧的胜任了工作.(首先声明,这个vuefluentvalidator.js是我上周末也就是7月15号才开始构思和编写的,而我最开始的目的是希望它能轻松完成表单的校验工作,但没想过许多复杂多变的情况.所以这期间出现了多次更改和修正).目前我已将它上传至github,网址为:https://git