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

如何在JavaScript函数中以变量形式传入Action和Controller至@Url.Action调用?

问题分析

你写的代码存在核心问题:@Url.Action是服务器端Razor代码,会在页面渲染阶段执行,而JavaScript变量strActionName、strControllerName是浏览器端运行时才会赋值的。服务器执行Razor代码时根本不知道这些JS变量的存在,因此原写法会直接报错或生成错误URL。

可行解决方案

下面提供两种实用的实现方式:

方式一:手动拼接URL(适用于默认路由规则)

利用Razor生成网站根路径,再通过JS拼接完整的Action地址:

function list_onSelectionChanged(e) {
    var strActionName = "Map";
    var strControllerName = "PMO";
    // 获取网站根路径(避免硬编码域名或路径)
    var baseUrl = '@Url.Content("~/")';
    // 按默认路由规则拼接URL:根路径 + 控制器名 + 动作名
    var targetUrl = baseUrl + strControllerName + '/' + strActionName;
    $("#content").load(targetUrl);
}

如果项目使用自定义路由规则,需根据路由格式调整拼接逻辑。

方式二:基于Razor模板替换(兼容自定义路由)

先让服务器生成带占位符的URL模板,再用JS变量替换占位符,这种方式能自动适配项目的路由规则:

function list_onSelectionChanged(e) {
    var strActionName = "Map";
    var strControllerName = "PMO";
    // 生成包含占位符的URL模板,服务器会根据路由规则输出正确格式
    var urlTemplate = '@Url.Action("{action}", "{controller}")';
    // 替换占位符为实际变量值
    var targetUrl = urlTemplate.replace("{action}", strActionName).replace("{controller}", strControllerName);
    $("#content").load(targetUrl);
}

这种方式无需关心路由配置,Razor会自动生成符合项目规则的URL结构,替换后即可直接使用。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:50:17