You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:45:09