如何在 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.

【问题讨论】:

你放到DOMready了吗? 不,我想如果我将代码放在 .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(), uid); return RedirectToAction("Index", "People");但它没有达到这个动作方法现在应该是什么问题。现在发送的 url 是://localhost:44305/People/Follow?uid=8 但相同/错误请求的 URL:/People/Follow。如果你能帮助我急需@Darin Dimitrov 那你的路由定义可能有问题。 你希望得到什么网址? 在这种情况下,您的路由定义可能是错误的。从您的问题中提供的信息很难知道。

以上是关于如何在 MVC 应用程序中从 JavaScript 解析相对路径的主要内容,如果未能解决你的问题,请参考以下文章

在javascript中从控制器MVC获取json

在 asp.net core 5 MVC 视图中从 C# 代码调用 JavaScript 函数

如何在 MVC 5 项目中从 bootswatch 或 wrapbootstrap 实现主题?

JSTree在MVC4中从视图调用到控制器

在 MVC 中从区域渲染局部视图

使用 MVC Razor 语法检查视图模型属性在 Javascript 中是不是具有值