MVC遇上bootstrap后的ajax表单模型验证
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表单验证
使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jqueyr.validate的话只有使用他自己的样式了,而且有模型在使用模型验证更方便点.怎么解决呢? 当 ...
- Spring MVC 文件上传、Restful、表单校验框架
目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...
- yii2 modal弹窗之ActiveForm ajax表单异步验证
作者:白狼 出处:http://www.manks.top/yii2_modal_activeform_ajax.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位 ...
- JQuery插件,轻量级表单模型验证(续 二)
好不容易,有心思,那就把没做完的JQuery轻量级表单验证做完吧 之前做到了空参数验证的,现在增加带参数的验证. 附上html <form id="ValidataForm" ...
- JQuery插件,轻量级表单模型验证(续 一)
之前的代码结构,不方便扩展多结构的模型验证 重新结构设计了一下验证模型核心 var validateForm = (function(model) { model.Key = "[data- ...
- JQuery插件,轻量级表单模型验证
附上源码和Demo段 var validataForm = (function(model) { model.Key = "[data-required='true']"; mod ...
- Yii表单模型使用及以数组形式提交表单数据
按Yii文档里的描述,Yii在处理表单的一般过程是: 创建表单对应的模型类,设置字段验证规则 创建表单提交对应的action,处理提交的内容 在视图中创建表单form 在刚刚的一个小项目里,想使用aj ...
- jquery php ajax 表单验证
本实例用到 JQuery 类库本身的函数和功能,所有表单信息利用 PHPMailer 类库邮件的形式发送. .创建一个表单 html 页面 表单部分 html 代码 以下为引用内容: &l ...
- Ajax表单提交插件jquery form
jQuery Form插件是一个优秀的Ajax表单插件,我们可以非常容易的使用它处理表单控件的值,清空和复位表单控件,附件上传,以及完成Ajax表单提交. jQuery Form有两个核心方法ajax ...
随机推荐
- solr4.3 java.lang.NumberFormatException
solr java.lang.NumberFormatException 现象:定时每天全量,每隔5分钟增量DIH从mysql导入数据 solr4j返回加过Id列表,一天偶然出现 java.lang. ...
- 2分钟 sublime设置自动行尾添加分号并换行:
18:03 2016/4/162分钟 sublime设置自动行尾添加分号并换行:注意:宏文件路径要用反斜杠/,2个\\会提示无法打开宏文件.不需要绝对路径很简单利用宏定义:1.录制宏:由于是录制动作宏 ...
- Python框架之Tornado(二)请求阶段
概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) ...
- JS区分移动端和PC
var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger& ...
- @Autowired
1. Spring框架中进行注入式,使用@Autowired. @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装 ...
- 谈 CSS 模块化
以前看过模块化的相关资料以及解释,对模块化有了一个表皮的了解,自己也做了一些相关的实践,由于接触到的项目交小,所以也没能更好的去体现和理解模块化,但总体还是有那么一些感悟,但是如果要说怎么才能算是好的 ...
- Python之路第一课Day7--随堂笔记(面向对象编程进阶...未完待续 )
本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 一.静态方法 通过@s ...
- content内网,会显示内容,没有内容可地址存在就是这个情况
漏洞地址:http://note.youdao.com/memory/?url=http://www.wooyun.org(如需登录,请注册登录) 正文预览的地方会读取URL地址的<meta n ...
- H5 表单
伴随着互联网富应用以及移动开发的兴起,传统的Web表单已经越来越不能满足开发的需求,HTML5在Web表单方向也做了很大的改进,如拾色器.日期/时间组件等,使表单处理更加高效. 1.1新增表单类型 - ...
- Algorithm | Binary Search
花了半天把二分查找的几种都写了一遍.验证了一下.二分查找的正确编写的关键就是,确保循环的初始.循环不变式能够保证一致. 可以先从循环里面确定循环不变式,然后再推导初始条件,最后根据循环不变式的内容推导 ...