1.创建Model,添加标注。

[Serializable]
public class BaseUserModel:BaseModel
{
[StringLength(100)]
[Required(ErrorMessage = "User Name can not be empty")]
public string UserName { get; set; }

}

2.controller中action传Model到razor页面

public ActionResult Create()
{

BaseUserModel model = new BaseUserModel();
return View(model);

}

public ActionResult Create(BaseUserModel editViewModel)
{
if (ModelState.IsValid)
{...............}

return View(model);

}

3.razor页面验证数据

@using (Html.BeginForm("Edit", "BaseUser", FormMethod.Post, new { id = "editBaseUser_Form", enctype = "multipart/form-data" }))
{
 .....

@Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control", @maxlength = "50" } })
@Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })

....
}

var $form = $("#editBaseUser_Form");
var url = $form.attr("action");
var formDatas = $form.serializeJSON();
$form.removeData("validator");//必须写这个,不然第一次表单数据为空时,点击提交按钮,不会被Validation组件检测到,会被提交到服务器
$form.removeData("unobtrusiveValidation");//必须写这个,不然第一次表单数据为空时,点击提交按钮,不会被Validation组件检测到,会被提交到服务器
$.validator.unobtrusive.parse($form);//重新对控件进行验证
var bool = $form.validate().form();
if (bool) {
post(url, formDatas, function (data) {
if (data.Status == 200) {}

}

//易错总结

页面加载后运行此代码

$(function() {
$.validator.unobtrusive.parse($("form"));
});

原因:

页面加载后unobtrusive已对各标签的验证状态进行保存,页面局部加载后并不会导致unobtrusive重新对页面的控件进行验证并保存前状态,导致新页面无法进行验证。

原理:

注意看jquery.validate.unobtrusive源码最后一段:

$(function () {
$jQval.unobtrusive.parse(document);
});

jquery.validate.unobtrusive在页面加载后响应并运行上面代码,解析页面中data-val-*属性的标签,检验其验证规则。

局部刷新或加载页面后,jquery.validate.unobtrusive无法对新加入的标签进行data-val-*属性的过滤,导致验证失效。

解决:

$(function() {
$.validator.unobtrusive.parse($("form"));
});

调用上面代码,使unobtrusive重新对控件进行验证

asp.net mvc model attribute and razor and form and jquery validate 完美结合的更多相关文章

  1. ASP.NET MVC异步验证是如何工作的03,jquery.validate.unobtrusive.js是如何工作的

    在上一篇"ASP.NET MVC异步验证是如何工作的02,异步验证表单元素的创建"中了解了ASP.NET异步验证是如何创建表单元素的,本篇体验jquery.validate.uno ...

  2. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  3. ASP.NET MVC Model验证(五)

    ASP.NET MVC Model验证(五) 前言 上篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现, 然而在MVC框架中还给我们提供了其它 ...

  4. ASP.NET MVC Model元数据(五)

    ASP.NET MVC Model元数据(五) 前言 在上一篇中我们描述了应用于Model上面的各种用于显示控制的特性类,在本篇中将详细的介绍这些特性类的应用,虽然它们跟Model元数据的直接关系并不 ...

  5. ASP.NET MVC Model元数据(四)

    ASP.NET MVC Model元数据(四) 前言 前面的篇幅讲解了Model元数据生成的过程,并没有对Model元数据生成过程的内部和Model元数据结构的详细解释.看完本篇后将会对Model元数 ...

  6. ASP.NET MVC Model元数据(二)

    ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...

  7. ModelBinder——ASP.NET MVC Model绑定的核心

    ModelBinder——ASP.NET MVC Model绑定的核心 Model的绑定体现在从当前请求提取相应的数据绑定到目标Action方法的参数.通过前面的介绍我们知道Action方法的参数通过 ...

  8. ASP.NET MVC Model验证(四)

    ASP.NET MVC Model验证(四) 前言 本篇主要讲解ModelValidatorProvider 和ModelValidator两种类型的自定义实现,前者是Model验证提供程序,而Mod ...

  9. ASP.NET MVC Model验证(三)

    ASP.NET MVC Model验证(三) 前言 上篇中说到在MVC框架中默认的Model验证是在哪里验证的,还讲到DefaultModelBinder类型的内部执行的示意图,让大家可以看到默认的M ...

随机推荐

  1. new一个有父类的对象时各代码块的执行顺序问题

    public class QQ { public static void main(String[] args) { new B(); } } class A { static { System.ou ...

  2. [牛客] [#1108 J] [树形结构] 买一送一

    2019牛客国庆集训派对day3 链接:https://ac.nowcoder.com/acm/contest/1108/J来源:牛客网 题意 ICPCCamp 有 n 个商店,用 $1,2,..., ...

  3. 加上这几个组件,flask摇身一变是django

    写在前面 flask和django作为python中的两大开源框架,各分春秋,各有各自的优点,不能一概而论说哪个好哪个不好.flask框架小而精,适用于快速开发一些小的应用的项目.django大而全, ...

  4. Centos 7搭建Gitlab服务器以及操作(创建项目,创建群组,创建用户,添加密钥)

    一. 安装并配置依赖包 在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开 系统防火墙中的HTTP和SSH端口访问 安装前准备 命令: ...

  5. 高性能mysql 第1章 mysql架构与历史

    mysql逻辑架构图: 第一层 客户端 第二层(服务层):针对所有类型的存储引擎可以公共提取的部分.将存储引擎抽离之后的其他部分都在这里.如:查询解析,分析优化,内置函数,存储过程,触发器,视图. 第 ...

  6. 完整的IT项目开发流程

    一般情况下,企业开发软件时会按照基线和定制两块并行方式执行项目开发工作.无论什么公司,都需要遵从一套成熟的产品研发过程体系,才能做出质量较好的产品.因此,如果出现项目较多的情况,应该合理地安排基线和定 ...

  7. String中的intern方法

    上一篇你真的会用String吗(3)-关于字符串拼接中我们提到了String.intern()方法,本篇我们就来详细的看下这个方法是干嘛的.首先来看下jdk8中这个方法的注释: When the in ...

  8. Android Studio 中出现APK error

    可能有很多人在用Android Studio编写程序时,时不时的会出现一个APK error的错误,反正我自从开始用Android Studio后,这个错误真的是时不时的蹦跶出来 最开始的时候,我是去 ...

  9. [Linux系统] (3)应用安装方式详解(编译安装、rpm包安装、yum安装)

    软件的安装方式: 编译安装 RPM包安装 yum安装 一.编译安装 1.下载一个源码安装包:tengine-2.3.0.tar.gz.这是淘宝二次开发过的nginx.将其解压. .tar.gz 2.查 ...

  10. jquery click()方法 语法

    jquery click()方法 语法 作用:当点击元素时,会发生 click 事件.当鼠标指针停留在元素上方,然后按下并松开鼠标左键时,就会发生一次 click.click() 方法触发 click ...