MVC中asp-route-xxx配合Unobtrusive Ajax失效问题求助
问题原因
你遇到的问题核心在于:Unobtrusive Ajax 会优先使用 data-ajax-url 指定的地址发起请求,而当前的 data-ajax-url 仅生成了基础的Action路径,未包含分页、搜索等参数。虽然a标签的href属性正确生成了带参数的URL,但Ajax请求并未使用该href,而是直接调用了data-ajax-url的纯路径,导致Action只能获取到默认值。
解决方法
以下两种修复方式任选其一即可:
方法1:将参数直接拼入 data-ajax-url
修改data-ajax-url的生成逻辑,使用Url.Action的重载方法,把所有需要的路由参数传入,让生成的URL自带完整参数:
<a class="page-link" data-ajax="true" data-ajax-method="get" data-ajax-url="@Url.Action("GetUsers", "AccountAdmin", new { page = i, pageSize = Model.PageSize, search = Model.Search, sortOrder = Model.SortOrder, sortExpression = Model.SortExpression })" data-ajax-mode="replace" data-ajax-update="#TableDiv" data-ajax-loading="#ajax" data-ajax-failure="failed"> @i </a>
这样生成的data-ajax-url会包含所有必要参数,Ajax请求时就能正确传递到Action方法。
方法2:移除 data-ajax-url,让Ajax自动复用a标签的href
Unobtrusive Ajax 对a标签有默认行为:如果不指定data-ajax-url,会自动使用a标签的href属性作为请求地址。直接删除data-ajax-url这一行即可:
<a class="page-link" data-ajax="true" data-ajax-method="get" data-ajax-mode="replace" data-ajax-update="#TableDiv" data-ajax-loading="#ajax" data-ajax-failure="failed" asp-route-page="@i" asp-route-pageSize="@Model.PageSize" asp-route-search="@Model.Search" asp-route-sortOrder="@Model.SortOrder" asp-route-sortExpression="@Model.SortExpression"> @i </a>
这种方式更简洁,因为你已经通过asp-route-*标签助手生成了正确的带参href,直接让Ajax复用它即可。
额外检查点
确认你的Action方法参数名称和asp-route-*的后缀完全一致,比如Action里的参数是否是int page、int pageSize、string search等。参数名称不匹配(即使大小写差异)也可能导致无法获取值,尽量保持名称一致避免问题。
内容的提问来源于stack exchange,提问作者mz1378
相关产品推荐
相关产品推荐

