如何在 MVC 应用程序中从 JavaScript 解析相对路径
Posted
技术标签:
【中文标题】如何在 MVC 应用程序中从 JavaScript 解析相对路径【英文标题】:How to resolve relative path from JavaScript within MVC application 【发布时间】:2016-04-11 17:59:14 【问题描述】:这是我试图从包含淘汰相关功能的 .js 文件中点击的 url:
self.followAction = $.resolvePath("/People/Follow?uid=" + data.UserId); 这里 People 是控制器,Follow 是动作方法,在按钮单击时,我想发送 userId 所以我写了这个。
为了从 javascript 中解析相对路径,我编写了这个函数
// Fix for resolving relative paths from within js scripts
$.resolvePath = function(url)
var path = '@Request.ApplicationPath';
if (path != '/') return path + url;
return url;
;
但是,单击按钮时,我收到此错误:HTTP 错误 404.0 - 未找到 它正在尝试的网址是:
localhost:44305/People/@Request.ApplicationPath/People/Follow?uid=8
我知道剃刀代码不会在 js 文件中解释。 所以,我把这个函数放在一个局部视图中:
$.resolvePath = function(url)
var path = '@Request.ApplicationPath';
if (path != '/') return path + url;
return url;
;
我尝试过像这样在布局头的部分直接调用它:
<head>
<script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
@ html.RenderPartial("VirtualPathFix");
</head>
但随后开始显示错误:
$.resolveurl: function is not defined
如果我把这个函数直接放在脚本文件夹中的 people.js 文件中,那么没有错误,但是在点击跟随按钮时,通过 url 的 http 404 错误是:
localhost:44305/People/@Request.ApplicationPath/People/Follow?uid=8
谁能帮帮我。感觉迷路了
我已尝试按照 darin 的建议在视图页面的标题中使用 window.baseUrl:
<script type="text/javascript">
window.baseUrl = '@Url.Content("~/")';
</script>
但我的 people.js 文件无法获取此属性,因此错误是:
Uncaught TypeError: window.baseUrl is not a function on line18 in people.js file. Can anyone tell me what are other things to try.
【问题讨论】:
你放到DOM
ready
了吗?
不,我想如果我将代码放在 .js 文件中,那么 razor 将无法识别此功能现在不知道将代码放在哪里感到沮丧@ParthTrivedi
【参考方案1】:
您可以在 Razor 模板中准备此网址:
<head>
<script type="text/javascript">
window.baseUrl = '@Url.Content("~/")';
</script>
</head>
现在在你的 js 文件中你可以使用这个变量 window.baseUrl
你不再需要这个 $.resolvePath
函数了。
【讨论】:
让我试试 thnxx 先生的帮助 public ActionResult Follow(int uid) repository.Follows(User.Identity.GetUserId以上是关于如何在 MVC 应用程序中从 JavaScript 解析相对路径的主要内容,如果未能解决你的问题,请参考以下文章
在 asp.net core 5 MVC 视图中从 C# 代码调用 JavaScript 函数