转: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表单验证的更多相关文章
- MVC遇上bootstrap后的ajax表单模型验证
MVC遇上bootstrap后的ajax表单验证 使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了, ...
- jquery php ajax 表单验证
本实例用到 JQuery 类库本身的函数和功能,所有表单信息利用 PHPMailer 类库邮件的形式发送. .创建一个表单 html 页面 表单部分 html 代码 以下为引用内容: &l ...
- 基于Bootstrap+jQuery.validate Form表单验证实践
基于Bootstrap jQuery.validate Form表单验证实践 项目结构 : github 上源码地址:https://github.com/starzou/front-end- ...
- Spring MVC 文件上传、Restful、表单校验框架
目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...
- validate+jquery+ajax表单验证
1.案例 1.1 Html form表单内容 <form class="cForm" id="cForm" method="post" ...
- Ajax 表单验证 实现代码
兼容: opera 9.6 + chrome 2.0 + FF 3 + IE 6 效果:一边输入一边实现验证 image 环境:ruby 1.8.6 + rails 2.1.0 + windows 核 ...
- ajax+表单验证+验证码生成例子
MainController.class.php <?php namespace AjaxYz\Controller; use Think\Controller; class MainContr ...
- jQuery Validatede 结合Ajax 表单验证提交
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- boostrap ajax表单验证提交
=============================================================================== 1. 1 <link href=& ...
随机推荐
- AJAX防止多次请求
ajax诠释 ajax 的全称是Asynchronous JavaScript and XML,其中,Asynchronous 是异步的意思,它有别于传统web开发中采用的同步的方式. ajax所包含 ...
- 圆角带箭头的提示框css实现
css是一个很强大的东西,很多网页效果,我们可以通过css直接实现.今天给大家分享的是一个用css实现的圆角带箭头的提示框. 效果如下图: 这一个样式主要涉及到了css的边框样式border的运用和定 ...
- XStream的基本使用
先准备两个bean public class Book { private int bookId; private String bookName; private String bookCode; ...
- 第6步:检查grid安装环境
6.1 检查系统包 grid 身份下校验安装环境(检测crs安装环境(sgdb1)) [root@node1 soft]#su – grid [grid@node1 ~]$ cd /soft/grid ...
- Unicode UTF-8 转换
Unicode是类似“U+4E25”或“\u4E25”的编码方式,很多情况下是4个十六进制的数,有时候不止. Unicode编码系统可分为编码方式和实现方式两个层次: 编码方式:“严”的Unicode ...
- 7.解决谷歌的SDK更新失败问题。
问题: 近期谷歌被墙之后,更新SDK老是失败.提示Download interrupted: Connection to https://dl-ssl.google.com refused(下载中断, ...
- MYSQL批量插入数据库实现语句性能分析【转】 批量插入!程序里面对于数据库插入的功能尽量用【异步处理+批量插入+(事务)】
假定我们的表结构如下 代码如下 CREATE TABLE example (example_id INT NOT NULL,name VARCHAR( 50 ) NOT NULL,value VA ...
- 面试题思考:interface和abstract的区别
抽象类(abstract) 含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象. 含有abstract方法的类必须定义为abstract class,abstra ...
- AndroidManifest.xml文件详解(activity)(一)
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetai ...
- 红黑树C++实现
1 /* 2 * rbtree.h 3 * 1. 每个节点是红色或者黑色 4 * 2. 根节点是黑色 5 * 3. 每个叶子节点是黑色(该叶子节点就空的节点) 6 * 4. 如果一个节点是红色,则它的 ...