关于javascript:使用内置功能在MVC6中使用JQuery AJAX提交剃须刀表单

Submitting a razor form using JQuery AJAX in MVC6 using the built-in functionality

我想知道是否有一种在MVC6中使用jQueryAjax提交表单的特定方法,仍然使用ASP.NET MVC的自动绑定功能。我相信MVC的其他版本可以使用jquery.unobtrusive-ajax并简单地使用

1
@using (Ajax.BeginForm("SaveData", new AjaxOptions(){}

由于MVC6发生了一些变化,我想知道除了在提交表单时向服务器发送一个普通的Ajax日志之外,推荐的新方法是什么。这意味着我将手动获取每个输入字段的值,将其转换为JSON并将其发送到控制器,以便所有内容都绑定到视图模型。

如果我对Ajax使用下面的javascript,Ajax表单设置是否重要?

1
2
3
4
5
6
7
8
9
$('form').submit(function () {
    $.ajax({
        type:"POST",
        url:"/Products/Create/",
        data: JSON.stringify(data),
        contentType:"application/json; charset=utf-8",
        dataType:"json"
    });
});

Ajax的工作方式相同,但使用新的MVC6标记助手(不要忘记引用"jquery"和"jquery.unobtrusive ajax"脚本),而不是@ajax助手。

jquery不引人注目的ajax存在于ASP.NET Github repo中,并且可以被Bower拉出来。

使用新的MVC标记帮助器,您只需如下声明表单:

1
2
3
<form asp-controller="Home" asp-action="SaveForm" data-ajax="true" data-ajax-method="POST">
...
</form>

要使用先前MVC版本中Ajax帮助器上存在的AjaxOptions,只需添加这些属性即可执行如下表单标记:

1
2
3
<form asp-controller="Home" asp-action="SaveForm" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#content">
...
</form>

您可以在表单中使用的HTML属性(以前称为AjaxOptions)如下(原始源代码):

2

另一个重要的变化是,如果请求确实是Ajax请求,如何在服务器端进行检查。在以前的版本中,我们只使用Request.IsAjaxRequest()

在MVC6上,您必须创建一个简单的扩展,以添加与以前的MVC版本(原始源)相同的选项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <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;
}


这里有一个关于Ajax表单的非常好的YouTube教程,您可以从这个github链接下载这个项目。它包含用于Ajax的脚本。

从上述项目复制的示例样式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<form asp-controller="Home1" asp-action="SaveForm"
      data-ajax="true"
      data-ajax-method="POST"
      data-ajax-mode="replace"
      data-ajax-update="#content"
      data-ajax-loading  ="#divloading"
      data-ajax-success="Success"
      data-ajax-failure ="Failure">
   
          <h4>@Html.Label("Name")</h4>
          @Html.TextBox("Name","",htmlAttributes:new { @class="form-control",id="Name"})
   
   
        <h4>@Html.Label("Age")</h4>
        @Html.TextBox("Age","", htmlAttributes: new { @class ="form-control", id ="Age" })
   
    <br/>
    <input type="submit" name="Submit"  class="btn btn-block btn-success" />
</form>


https://github.com/behrouz-goudarzi/ajaxtaghelper

阿贾泰格勒

在aspnet核心中使用标签帮助器使用链接和Ajax表单的简单解决方案

首先,将AjaxtAgHelper类从扩展文件夹复制到项目中。

其次,从wwwroot中的js文件夹复制ajaxtaghelper.js文件,并将其添加到项目中。

然后执行以下操作:打开viewimports文件并添加以下代码

1
2
3
4
5
@using AjaxTagHelper.Extensions
@using AjaxTagHelper
@using AjaxTagHelper.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AjaxTagHelper

要使用actionAjax,请添加以下代码而不是标记。

1
2
3
4
  <ajax-action ajax-action="Delete" ajax-controller="Home" ajax-data-id="@Model.Id"
                 class="btn btn-danger btn-sm" ajax-success-func="SuccessDelete">
        Delete
    </ajax-action>

使用以下代码使用Ajax将表单发送到服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <form id="frmCreate" class="col-sm-9">
       
           
                <input placeholder="Enter Name" name="Name" class="input-group" type="text" />
           
           
                <input placeholder="Enter Family" name="Family" class="input-group" type="text" />
           
           
                <input placeholder="Enter [email protected]" name="Email" class="input-group" type="email" />
           
       
    </form>
   
        <ajax-button ajax-controller="Home" ajax-action="Create" ajax-form-id="frmCreate" ajax-success-func="SuccessCreate"
                     class="btn btn-sm btn-success">
            Create
        </ajax-button>

最后,添加您需要查看的脚本,检查下面的代码

1
2
3
4
5
6
7
8
9
10
11
    function SuccessCreate(data) {
        console.log(data);
        $("#tbodyPerson").append(data);


    }
    function SuccessDelete(data) {
        $("#tr" + data.id).fadeOut();
    }

<script src="~/js/AjaxHelper.js">