转: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=& ...
随机推荐
- MFC编程之创建Ribbon样式的应用程序框架
Ribbon界面就是微软从Office2007開始引入的一种为了使应用程序的功能更加易于发现和使用.降低了点击鼠标的次数的新型界面.从实际效果来看,不仅外观美丽,并且功能直观,用户操作简洁方便. 利用 ...
- List、Map、Set三个接口存储元素时各有什么特点?
List.Map.Set三个接口存储元素时各有什么特点? 解答: 1)List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置.用户能够使用索引(元素在List中的位置,类似于 ...
- SQL Server 2008 SP3简体中文版官方下载
微软日前公开发布了SQL Server 2008 SP3,用户可以从微软下载中心获取SP服务包和功能包升级.SP3主要包括自SQL Server 2008 SP2以来的累积更新,修复了用户反馈的一些问 ...
- [翻译]在ASP.NET Web API中通过OData支持查询和分页
OData可以通过形如http://localhost/Products?$orderby=Name这样的QueryString传递查询条件.排序等.你可以在任何Web API Controller中 ...
- redis php 实例一
下面的例子都是基于php-redis这个扩展的. 1,connect 描述:实例连接到一个Redis. 参数:host: string,port: int 返回值:BOOL 成功返回:TRUE;失败返 ...
- html5 webwork
在Web开发的时候经常会遇到浏览器不响应事件进入假死状态,甚至弹出“脚本运行时间过长“的提示框,如果出现这种情况说明你的脚本已经失控了. 一个浏览器至少存在三个线程:js引擎线程(处理js).GUI渲 ...
- 【洛谷】P1040 加分二叉树
[洛谷]P1040 加分二叉树 题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第i个节点的分数 ...
- 8、手把手教React Native实战之ReactJS组件生命周期
1.创建阶段 getDefaultProps:处理props的默认值 在React.createClass调用 2.实例化阶段 React.render(<HelloMessage 启动之后 g ...
- 在 App Store 三年學到的 13 件事(下)
博文转载至 http://blog.csdn.net/iunion/article/details/18959801 Steven Shen,曾經寫過一本書,也翻過一本書,開發 iOS app ...
- c++ 类声明
class B; struct A { B* ptr; }; class B { public: }; int main() { ; } A中定义了B的指针,所以要声明class B,在定义处于不完整 ...