Ajax 的工作方式相同,但使用新的 MVC 6 Tag Helper 代替 @Ajax 助手(不要忘记引用“jquery”和“jquery.unobtrusive-ajax”脚本)。
JQuery Unobtrusive Ajax 存在于 Asp.Net GitHub 存储库中,可以被 Bower 拉取。
使用新的 MVC TagHelpers,您只需声明如下形式:
<form asp-controller="Home" asp-action="SaveForm" data-ajax="true" data-ajax-method="POST">
...
</form>
要使用以前 MVC 版本的 Ajax Helper 上存在的 AjaxOptions,只需添加这些属性,执行 form 标记,如下所示:
<form asp-controller="Home" asp-action="SaveForm" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#content">
...
</form>
<div id="content"></div>
您可以在表单中使用的 HTML 属性(以前称为 AjaxOptions)如下 (original source):
+------------------------+-----------------------------+
| AjaxOptions | HTML attribute |
+------------------------+-----------------------------+
| Confirm | data-ajax-confirm |
| HttpMethod | data-ajax-method |
| InsertionMode | data-ajax-mode |
| LoadingElementDuration | data-ajax-loading-duration |
| LoadingElementId | data-ajax-loading |
| OnBegin | data-ajax-begin |
| OnComplete | data-ajax-complete |
| OnFailure | data-ajax-failure |
| OnSuccess | data-ajax-success |
| UpdateTargetId | data-ajax-update |
| Url | data-ajax-url |
+------------------------+-----------------------------+
另一个重大变化是如何在服务器端检查请求是否确实是 AJAX 请求。在之前的版本中,我们只使用了Request.IsAjaxRequest()。
在 MVC6 上,您必须创建一个简单的扩展来添加与以前 MVC 版本 (original source) 中存在的相同选项:
/// <summary>
/// Determines whether the specified HTTP request is an AJAX request.
/// </summary>
///
/// <returns>
/// true if the specified HTTP request is an AJAX request; otherwise, false.
/// </returns>
/// <param name="request">The HTTP request.</param><exception cref="T:System.ArgumentNullException">The <paramref name="request"/> parameter is null (Nothing in Visual Basic).</exception>
public static bool IsAjaxRequest(this HttpRequest request)
{
if (request == null)
throw new ArgumentNullException("request");
if (request.Headers != null)
return request.Headers["X-Requested-With"] == "XMLHttpRequest";
return false;
}