如何在MVC应用程序中解析JavaScript的相对路径

时间:2016-01-07 11:05:07

标签: javascript jquery asp.net-mvc asp.net-mvc-4 knockout.js

这是我试图从.js文件中获取的url,其中包含与淘汰相关的函数:

self.followAction = $ .resolvePath(" / People / Follow?uid =" + data.UserId); 这里的人是控制器,跟随是动作方法,点击按钮,我想发送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

如果我把这个函数直接放在scripts文件夹中的people.js文件中,那么没有错误,但是按下按钮点击,http 404错误与url传递的是:

 localhost:44305/People/@Request.ApplicationPath/People/Follow?uid=8

任何人都可以帮助我。感到失落

我试图在视图页面的标题中使用window.baseUrl,如darin所建议的那样:

   <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.

1 个答案:

答案 0 :(得分:4)

您可以在Razor模板中准备此网址:

<head>
    <script type="text/javascript">
       window.baseUrl = '@Url.Content("~/")';
    </script>
</head>

现在,在您的js文件中,您可以使用此变量window.baseUrl您不再需要此$.resolvePath函数。