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. 关于CSV文件 Excel打开乱码问题的解决方案

    近日写java程序中,将数据输出到csv文件中,发现Excel打开之后,中文均为乱码 于是寻找解决方案,发现最简单的方式还是如此了 1. 将输出的csv文件用记事本打开 2. 另存为将文件编码格式改为 ...

  2. 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...

  3. display:table-cell

    布局神器display:table-cell Author:owenhong2015-06-17 随着时间的推进,ie6.ie7在中国浏览器市场的占有率越来越低的情况,我现在工作的团队,经过用户访问数 ...

  4. winfrom自定义滚动条

    panel或图片什么的跟着鼠标走,这里panel自己可以加背景图或直接搞个图就行了.为了演示清楚,有个滚动条控件做对比,与自定义的同步. using System; using System.Coll ...

  5. mysql多字段排序

    在对数据库进行查询的时候有时候需要将查询的结果按照某字段升序或者降序排列,甚至有时候需要按照某两个字段进行升降序排列.如果按照某一字段进行排列,只需要在查询语句最后写上 "order by ...

  6. apache rewrite_mod 经典疑问解答

    1.RewriteRule ^(com\/.*)$ index.php?do=$1 问:上面的规则匹配表达式 "^(.*)$" 匹配的内容是什么 答:匹配内容是URI站点目录:/d ...

  7. CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境

    安装篇: 一.安装Apache yum install httpd #根据提示,输入Y安装即可成功安装 /etc/init.d/httpd start#启动Apache 备注:Apache启动之后会提 ...

  8. Html5 中的新语义标签

    1.1 语义标签对于我们并不陌生,如<p>表示一个段落.<ul>表示一个无序列表<h1> ~ <h6>表示一系列标题等,在此基础上HTML5增加了大量更 ...

  9. Underscore-分析

    0.Ecmascript的版本重要时间点 Ecmascript262-3 1999年,ie5.5及以后完全支持,ff,chrome等全部支持Ecmascript262-4 因为跨越太大,废弃Ecmas ...

  10. js表达式与语句的区别

    http://www.2ality.com/2012/09/expressions-vs-statements.html http://www.jb51.net/article/31298.htm 表 ...