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. yotaku的开发日志(1)

    2015-12-18 21:17:46 连续看了几天的ThinkPHP框架,目前看到基于角色的用户访问权限控制. 相关代码如下: 数据库 用户表(管理员) mg_id mg_name mg_pwd m ...

  2. 【BZOJ3943】[Usaco2015 Feb]SuperBull 最小生成树

    [BZOJ3943][Usaco2015 Feb]SuperBull Description Bessie and her friends are playing hoofball in the an ...

  3. mac osx Forbidden You don't have permission to access / on this server解决方法

    (1)首先查看*.conf 是否有读写权限,如果没有要将文件赋予读写权限,比如 localhost.conf (2)再查看/Users/username/Sites/localhost/文件夹是否有i ...

  4. Print a Binary Tree in Vertical Order

    http://www.geeksforgeeks.org/print-binary-tree-vertical-order/ package algorithms; import java.util. ...

  5. 转载:Chrome调试折腾记_(1)调试控制中心快捷键详解!!!

    转载:http://blog.csdn.net/crper/article/details/48098625 大多浏览器的调试功能的启用快捷键都一致…按下F12;还是熟悉的味道;  或者直接 Ctrl ...

  6. HTML5 audio与video标签实现视频播放,音频播放

    随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...

  7. 配置python环境变量(转)

    默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量.此时不能在命令行直接使用python命令. 1.首先需要在系统中注册python环境变量:假设python的安装路 ...

  8. Android历史版本Logo

        Android操作系统是一个由Google和开放手持设备联盟共同开发发展的移动设备操作系统,其最早的一个版本Android 1.0 beta发布于2007年11月5日,至今已经发布了多个更新. ...

  9. [IOS]使用了cocoapods 抱错Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ......

    Pods was rejected as an implicit dependency for ‘libPods.a’ because its architectures ‘i386’ didn’t ...

  10. Flume_企业中日志处理

    企业中的日志存放_1 201611/20161112.log.tmp 第二天文件变为20161112.log与20161113.log.tmp 拷贝一份flume-conf.properties.te ...