如何在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
相关产品推荐
相关产品推荐

