所做工作:
1.删除所有页面的ajax,重新建立多个空白ajax 速度正常。
2.删除页面引用js与图片没有影响。
3.ajax设置同步,速度正常
问题原因: 同一个session 每次只能建立一次请求,必须关闭session才可再次连接。可以采用cookie保存,若需加密可采用md5加密
解决方法: [SessionState(SessionStateBehavior.ReadOnly)]
所做工作:
1.删除所有页面的ajax,重新建立多个空白ajax 速度正常。
2.删除页面引用js与图片没有影响。
3.ajax设置同步,速度正常
问题原因: 同一个session 每次只能建立一次请求,必须关闭session才可再次连接。可以采用cookie保存,若需加密可采用md5加密
解决方法: [SessionState(SessionStateBehavior.ReadOnly)]
转载于:https://www.cnblogs.com/wangjiachen/p/4202286.html
有时候会遇到一个页面放多个Form的情况,在mvc中我们知道一个页面只能放一个Model,那如何在使用Model验证的前提下,放多个表单呢?这里使用PartialView+AjaxForm的方式解决。
1 PartialView
对多个表单,建立多个PartialView,Controller层代码如下:
public PartialViewResult Main() { MainModel model = new MainModel(); return PartialView(model); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Main(MainModel model) { if (!ModelState.IsValid) { ViewBag.IndexRe = "Index 验证不通过"; return PartialView(model); } ViewBag.IndexRe = "Index 提交成功"; return PartialView(model); } public PartialViewResult Child() { ChildModel model = new ChildModel(); return PartialView(model); } [HttpPost] [ValidateAntiForgeryToken] public PartialViewResult Child(ChildModel model) { if (!ModelState.IsValid) { ViewBag.ChildRe = "Child 验证不通过"; return PartialView(model); } ViewBag.ChildRe = "Child 提交成功"; return PartialView(model); }
在上面可以看到,有两个子页面,一个是Main,一个是Child,显示页面就负责引用这2个PartialView就可以了:
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" /> <script src="http://www.cnblogs.com/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.validate.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script> <script type="text/javascript"> var vallidateChild = function () { $('#divchild form').removeData("validator"); $.validator.unobtrusive.parse('#divchild form'); }; var vallidateMain = function () { $('#divMain form').removeData("validator"); $.validator.unobtrusive.parse('#divMain form'); }; </script> </head> <body> <div id="divMain"> @{Html.RenderAction("Main");} </div> <div id="divchild"> @{Html.RenderAction("Child");} </div> </body> </html>
2 Ajax.BeginForm
在子页面的view层用,需要标注表单是ajax的,如下:
Child的view如下:
@model MvcApplication8.Models.ChildModel @using (Ajax.BeginForm("Child", "MultiForm", new AjaxOptions() { UpdateTargetId = "divchild", InsertionMode = InsertionMode.Replace, OnComplete = "vallidateChild()"})) {@Html.AntiForgeryToken() <div>@Html.TextBoxFor(m => m.ChildName) @Html.ValidationMessageFor(m => m.ChildName) </div> <div> <input type="submit" id="childBtn" value="子提交" /></div> }
Main的view如下:
@model MvcApplication8.Models.MainModel @using (Ajax.BeginForm("Main", "MultiForm", new AjaxOptions() { UpdateTargetId = "divMain", InsertionMode = InsertionMode.Replace, OnComplete = "vallidateMain()" })) {@Html.AntiForgeryToken() <div> @Html.TextBoxFor(m => m.LogName) @Html.ValidationMessageFor(m => m.LogName) </div> <div> <input type="submit" value="主提交" id="indexBtn" /></div> }
3 注意
显示页面的js引用必须有如下:
<script src="http://www.cnblogs.com/Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.validate.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script> <script src="http://www.cnblogs.com/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
同时注意显示页面的js:
<script type="text/javascript"> var vallidateChild = function () { $('#divchild form').removeData("validator"); $.validator.unobtrusive.parse('#divchild form'); }; var vallidateMain = function () { $('#divMain form').removeData("validator"); $.validator.unobtrusive.parse('#divMain form'); }; </script>
而对这两个js函数的绑定是在AjaxOptions中的OnComplete = "vallidateMain()"。意思是指当提交后执行vallidateMain函数,函数中的意思是指重新绑定jquery的验证。
转载于:https://www.cnblogs.com/Kingdizzy/archive/2013/04/28/3049634.html
/on ajax start
$(document).ajaxStart(function(){
$("#loader").show();
});
//on ajax end
$(document). ajaxStop(function(){
$("#loader").hide();});
定义和用法
ajaxStop() 方法在 AJAX 请求结束时执行函数。它是一个 Ajax 事件。
详细说明
无论 Ajax 请求在何时完成 ,jQuery 都会检查是否存在其他 Ajax 请求。
如果不存在,则 jQuery 会触发该 ajaxStop 事件。
在此时,由 .ajaxStop() 方法注册的任何函数都会被执行。
最近在做项目的时候发现两个问题,第一个问题是在主页面有多个div,在div里面有input元素的onclick事件,在第一次打开div的时候通过onclick调用ajax可以被执行,当关掉打开的div重新再打开的时候onclick事件不生效。第二个问题是两个div调用ajax时会相互影响,当打开第一个div并关闭的时候,第二个div的input元素的onclick事件不被执行了。
针对第一个问题,将input的onclick时间使用jquery的live()方法进行绑定,这时要对input元素的属性进行声明,如<input type="button" id="updateData">,在绑定事件时可以写成
$("input#updateData").live("click",function(){
需要执行的代码
});
这样修改之后就可以执行所需执行的onclick事件了,但是这样存在一个问题,当多次调用时需要执行的代码就会被重复执行,这时因为每执行一次live()就会新生成一个委派函数,为了避免这个问题只需要在live()前使用die()即可,即将上述代码改为:
$("input#updateData").die().live("click",function(){
需要执行的代码
});
这样修改之后在重复执行之前总是会销毁原来的委派,即只保留一个委派,就不会出现重复的问题了。
针对第二个问题,这里由于我两个div里面有相同的字段,为了偷懒直接将其中一个div的重复内容复制到了第二个div中,导致元素的id相同,在调用ajax根据id进行赋值时就无法确定赋值给哪个div,因此就出现上述我所描述的问题,在这里需要注意,当同一个页面嵌套多个div的时候,除非是不需要对div里面的元素进行操作,如果涉及到操作的话,一定要保证你所使用的id或者name完全不同,在这里指出来也希望小伙伴你们汲取教训。