经过折腾,总结总结ajax的使用场景和方法
ASP NET WebForm
在webfrom中使用ajax就很明朗,要么就submit提交表单,要么就ajax提交表单。
- 注意点:假设在登录场景,ajax登录成功后,需要重定向Redirect,但是Redirect对于ajax引擎来说是无法识别的。
所以所有的ajax重定向都需要在ajax回调函数中发起请求 - 注意点:在进行ajax请求时,注意将button的type修改下,不要写成submit
ASP NET MVC
ASP NET Core MVC
这两种放在一起说,就是因为这两者差不多,都可以使用XML和原jquery
区别:
在MVC中可以实现非侵入式(一种代码书写优雅的说法)Ajax使用方法,即Unobtrusive Ajax;
但ASP NET MVC和ASP NET Core MVC 使用Unobtrusive Ajax有区别:
-
ASP NET MVC可以使用AjaxHelper,AjaxHelper提供了很多函数:ActionLink,RouteLink,BeginForm,BeginRouteForm。使用AjaxHelper后,原来的表单控件上会多了一些属性:data-ajax,data-ajax-success等等,Unobtrusive Ajax会识别这些属性做相关处理
-
ASP NET Core MVC 中没有AjaxHelper,需要直接在form中添加data-ajax="true"等相关的属性。
-
使用Unobtrusive Ajax时,在提交表单时,可以使用submit,Unobtrusive Ajax会对submit事件进行处理:
$(document).on("submit", "form[data-ajax=true]", function (evt) {
var clickInfo = $(this).data(data_click) || [],
clickTarget = $(this).data(data_target),
isCancel = clickTarget && (clickTarget.hasClass("cancel") || clickTarget.attr('formnovalidate') !== undefined);
evt.preventDefault();
if (!isCancel && !validate(this)) {
return;
}
asyncRequest(this, {
url: this.action,
type: this.method || "GET",
data: clickInfo.concat($(this).serializeArray())
});
});
- 有个场景:
MVC中使用表单;表单中元素对应着强类型中的属性;需要使用submitajax提交表单;在请求服务器之前需要进行预处理;
那就要用到Unobtrusive Ajax中的sumit提交和onsubmit()去请求前的预处理;
但是sumit ajax提交和onsubmit()之前会形成异步;无法再预处理之后再发送ajax异步请求;处理办法就是修改上面那个代码块:
$(document).on("submit", "form[data-ajax=true]", function (evt) {
var clickInfo = $(this).data(data_click) || [],
clickTarget = $(this).data(data_target),
isCancel = clickTarget && (clickTarget.hasClass("cancel") || clickTarget.attr('formnovalidate') !== undefined);
evt.preventDefault();
if (!isCancel && !validate(this)) {
return;
}
//提交前的预处理......
asyncRequest(this, {
url: this.action,
type: this.method || "GET",
data: clickInfo.concat($(this).serializeArray())
});
});