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请求,如何在服务器端进行检查。在以前的版本中,我们只使用
在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"> |