ASP.NET 6 MVC中如何获取或创建AjaxHelper使用AjaxExtensions.ActionLink
ASP.NET 6 MVC 中 AjaxHelper 实例获取及 ActionLink 调用方法
首先纠正一个引用错误:你代码里引入的System.Web.Mvc.Ajax是.NET Framework 平台下传统ASP.NET MVC 5及更早版本的命名空间,在ASP.NET 6(ASP.NET Core 6)MVC项目中不能直接使用,需要先做适配准备。
- 安装依赖包:在NuGet包管理器中安装
Microsoft.jQuery.Unobtrusive.Ajax包,为项目提供ASP.NET Core 兼容的Ajax扩展能力。 - 修正命名空间引用:删除原来的
@using System.Web.Mvc.Ajax;,替换为@using Microsoft.AspNetCore.Mvc.Ajax;,可以直接写在当前视图,也可以写到全局_ViewImports.cshtml文件中对所有视图生效。 - 引入必要脚本:在当前视图或者共用布局页中引入jQuery和unobtrusive ajax脚本,否则生成的Ajax链接无法正常发起异步请求:
<script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script>
- AjaxHelper实例不需要手动创建:Razor视图引擎在渲染视图时已经默认初始化了
Ajax属性,这个属性就是AjaxExtensions.ActionLink方法第一个参数需要的AjaxHelper类型实例,你代码里???的位置直接传入Ajax即可。
修正后的完整代码如下:
@model List<Shift> @using Microsoft.AspNetCore.Mvc.Ajax @{ AjaxOptions deleteOptions = new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "table" }; } @foreach (Shift shift in Model) { <td> @AjaxExtensions.ActionLink(Ajax, "Delete", "DeleteShift", "MainDoctor", new {id=shift.Id}, deleteOptions) </td> }
简化写法提示:
ActionLink是基于AjaxHelper的扩展方法,你不需要显式调用静态类AjaxExtensions,直接用扩展方法语法写@Ajax.ActionLink("Delete", "DeleteShift", "MainDoctor", new {id=shift.Id}, deleteOptions)效果完全一致,代码更简洁。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

