MVC遇上bootstrap后的ajax表单验证

使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了,而且有模型在使用模型验证更方便点。怎么解决呢?

当然你可以专门写一个针对此的jquery插件,我觉得蛮麻烦的,喜欢写插件的研究下吧。

首先Nuget获取一个 MVC EditorTemplates for Bootstrap 3 的组件,有了他以后就有了一些模版,比如比较简单的一个Text:

@model object

<div class="form-group@(Html.ValidationErrorFor(m => m, " has-error"))">

@Html.LabelFor(m => m, new { @class = "control-label" })

<div class="controls">

@Html.TextBox(

"",

ViewData.TemplateInfo.FormattedModelValue,

ViewBag.ClearTextField == true ? new { @class = "form-control clear-text-field input-block-level" } : new { @class = "form-control input-block-level" } )

@Html.ValidationMessageFor(m => m, null, new { @class = "help-block" })

</div>

</div>

这样子以后在使用EditorFor后就会直接输出bootstrap需要的html,比较方便。

我们看到里面已经有了验证失败的has-error的处理,第二个问题来了,我们需要前端验证,ajax验证也行啊,还有自定义验证呢?

于是乎继续利用MVC自带的模型验证,刚才获取的组件中有个Validation类,我们先在里面添加一个扩展方法用于非强类型

public static MvcHtmlString ValidationError(this HtmlHelper htmlHelper, string field, string error)

{

if (HasError(htmlHelper, ModelMetadata.FromStringExpression(field, htmlHelper.ViewData), field))

return new MvcHtmlString(error);

else

return null;

}

View中即可添加:

<div class="form-group@(Html.ValidationError("Department", " has-error"))">

<label class="control-label" for="DepartmentId">所在部门</label>

<div class="controls">

<span id="deptname"> </span><a id="btnSelectDepartment">选择部门</a>

<input class="form-control" data-val="true" data-val-required="部门是必需的。" id="DepartmentId" name="DepartmentId" type="hidden" value="">

@Html.ValidationMessage("Department", null, new { @class = "help-block" })

</div>

</div>

最后在脚本中处理ajax提交和回发的处理,不知道用MVC的Ajax.BeginForm能不能更方便点,不过个人觉得这东西不是很灵活,所以继续用ajaxSubmit及jquery.ajax:

//ready

var $divuserform = $("#divuserform");

$divuserform.dialog({

title: '新建用户',//.....

});

$("#btnCreateUser").click(function () {

var nodes = zTreeObjleft.getSelectedNodes();

if (nodes.length > 0) {

CreateUserForm($divuserform);

}

})

function CreateUserForm(form) {

var $divuserform = form;

$.ajax({

url: "CreateUser",

success: function (html) {

CreateUserFormSuccessCallback(html, $divuserform);

}

});

}

function InitSelectDepartmentWhenCreateUser() {

$("#btnSelectDepartment").departmentSelection({

onSelected: function (name, id) {

$("#deptname").text(name);

$("#DepartmentId").val(id);

}

});

}

function CreateUserFormSuccessCallback(html, form) {

var $divuserform = form;

$divuserform.children().children().html(html);

$("#divuserform").dialog("open");

var $form = $divuserform.find("form")

InitSelectDepartmentWhenCreateUser();

$form.submit(function () {

$form.ajaxSubmit(function (data) {

if (data == "success") {

$("#divuserform").dialog("close");

$("#divuserform").clearForm();

}

else {

CreateUserFormSuccessCallback(data, form);

}

});

event.preventDefault();

});

}

后台Action方法中我们便可为其补充自定义验证:

if (!DepartmentId.HasValue)

{

ModelState.AddModelError("Department", "必须选择部门");

}

if (ModelState.IsValid)

{

user.Id = Guid.NewGuid();

user.CreateTime = DateTime.Now;

if (DepartmentId.HasValue)

{

var dept = new DeptUserRole();

dept.DepartmentId = DepartmentId.Value;

dept.IsMain = true;

dept.RoleId = RoleId.Value;

user.DeptUserRoles.Add(dept);

}

db.Users.Add(user);

await db.SaveChangesAsync();

return Content("success");

}

return View(user);

大致效果:

MVC遇上bootstrap后的ajax表单模型验证的更多相关文章

  1. 转:MVC遇上bootstrap后的ajax表单验证

    使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了,而且有模型在使用模型验证更方便点.怎么解决呢? 当 ...

  2. Spring MVC 文件上传、Restful、表单校验框架

    目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...

  3. yii2 modal弹窗之ActiveForm ajax表单异步验证

    作者:白狼 出处:http://www.manks.top/yii2_modal_activeform_ajax.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...

  4. JQuery插件,轻量级表单模型验证(续 二)

    好不容易,有心思,那就把没做完的JQuery轻量级表单验证做完吧 之前做到了空参数验证的,现在增加带参数的验证. 附上html <form id="ValidataForm" ...

  5. JQuery插件,轻量级表单模型验证(续 一)

    之前的代码结构,不方便扩展多结构的模型验证 重新结构设计了一下验证模型核心 var validateForm = (function(model) { model.Key = "[data- ...

  6. JQuery插件,轻量级表单模型验证

    附上源码和Demo段 var validataForm = (function(model) { model.Key = "[data-required='true']"; mod ...

  7. Yii表单模型使用及以数组形式提交表单数据

    按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...

  8. jquery php ajax 表单验证

    本实例用到 JQuery 类库本身的函数和功能,所有表单信息利用 PHPMailer 类库邮件的形式发送.   .创建一个表单 html 页面   表单部分 html 代码   以下为引用内容: &l ...

  9. Ajax表单提交插件jquery form

    jQuery Form插件是一个优秀的Ajax表单插件,我们可以非常容易的使用它处理表单控件的值,清空和复位表单控件,附件上传,以及完成Ajax表单提交. jQuery Form有两个核心方法ajax ...

随机推荐

  1. 【CQgame】[幸运方块 v1.1.2] [Lucky_Block v1.1.2]

    搬家首发!!! 其实从初一我就写过一些小型战斗的游戏,但是画面都太粗糙,代码也比较乱,也就是和两三个同学瞎玩,但自从观摩了PoPoQQQ大神的游戏,顿时产生了重新写一部游戏的冲动,于是各种上网查找各种 ...

  2. @WebServlet用注解来实现servlet和url的映射

    package com.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Se ...

  3. xpath使用

    一.安装(win7 64) 1.安装lxml,pip install lxml 2.如果安装出错,下载lxml-3.5.0b1.win-amd64-py2.7.exe: 地址:http://www.l ...

  4. Python3.5 day3作业一:实现简单的shell sed替换功能

    需求: 1.使python具有shell中sed替换功能. #!/usr/bin/env python #_*_conding:utf-8_*_ #sys模块用于传递参数,os模块用于与系统交互. i ...

  5. Ubuntu Java 环境变量

    方法1:修改/etc/profile 文件所有用户的 shell都有权使用这些环境变量<1>在 shell终端执行命令:vi /etc/profile<2>在 profile文 ...

  6. 移动前端不得不了解的html5 head 头标签

    本文主要内容来自一丝的常用的 HTML 头部标签和百度FEX的HTML head 头标签. 移动端的工作已经越来越成为前端工作的重要内容,除了平常的项目开发,HTML 头部标签功能,特别是meta标签 ...

  7. Ubuntu14.04或16.04下Hadoop及Spark的开发配置

    对于Hadoop和Spark的开发,最常用的还是Eclipse以及Intellij IDEA. 其中,Eclipse是免费开源的,基于Eclipse集成更多框架配置的还有MyEclipse.Intel ...

  8. linux下ftp配置文件详解

    # 匿名用户配置 anonymous_enable=YES # 是否允许匿名ftp,如否则选择NO anon_upload_enable=YES # 匿名用户是否能上传 anon_mkdir_writ ...

  9. 实验mongodb使用gridfs存放一个大文件

    1.启动mongoDB 2.使用gridfs存放大文件 3.观察fs.chunks和fs.files的情况 命令 db.fs.chunks.find()查到的是一些二进制文件:

  10. FreeMarker中文API手册(完整)

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用 ...