【问题标题】:How do I make JS know about the application root?如何让 JS 知道应用程序的根?
【发布时间】:2015-12-18 17:05:19
【问题描述】:

我有一些在 MVC 项目中引用 /jobs/GetIndex 的 javascript。当我在本地运行它时,这很有效,因为我有一个名为 JobsControllerController。当我部署它时,我将应用程序部署到“Jobs”子文件夹,这意味着 URL 应该变为 http://site/jobs/jobs/GetIndex 但它会变为 http://site/jobs/GetIndex,我想是因为 javascript 不知道“根 URL”是什么,并使用该站点作为根。我怎样才能让它在这两种环境中工作?

【问题讨论】:

  • 您使用的是服务器端还是客户端?你用 webpack 之类的打包工具吗?

标签: javascript asp.net-mvc-4 iis


【解决方案1】:

如果您只是关心获取站点的根/基本 url,以便您可以附加它以获取您所追求的另一个 url,您可以简单地使用 / 作为您的 url 的第一个字符。

var urlToJobIndex2= "/jobs/GetIndex";

这是另一种方法,如果您想要的不仅仅是应用程序根目录(例如:特定 url(使用 mvc 辅助方法构建,例如 Url.RouteUrl 等)

您可以在 Razor 视图中使用 Url.Content 辅助方法来生成应用程序库的 url,将其分配给 javascript 变量并在您的其他 js 代码中使用它来构建您的其他 url。 始终确保使用 javascript 命名空间以避免全局 javascript 变量可能出现的问题。

如果您想获取特定操作方法的 url,您可以使用 Url.ActionUrl.RouteUrl 辅助方法。

因此,在您的 razor 视图(布局文件或特定 view)中,您可以这样做。

<script>
    var myApp = myApp || {};  
    myApp.Urls = myApp.Urls || {};
    myApp.Urls.baseUrl = '@Url.Content("~")';
    myApp.Urls.jobIndexUrl= '@Url.Action("GetIndex","jobs")';
</script>
<script src="~/Scripts/PageSpecificExternalJsFile.js"></script>

在您的PageSpecificExternalJsFile.js 文件中,您可以像这样阅读它

var urlToJobIndex= myApp.Urls.jobIndexUrl;
// Or With the base url, you may safely add the remaining url route.
var urlToJobIndex2= myApp.Urls.baseUrl+"jobs/GetIndex";

Here 是关于相同的详细答案,但在特定页面/视图中使用它

Angular Js

您的角度控制器/服务/指令中可能需要正确的相对 url。同样的方法也适用于您的角度代码。只需构建 js 命名空间对象并使用 angular value 提供程序将数据传递到您的 angular 控制器/服务/指令,如 in this post 示例代码中的详细说明。

【讨论】:

    【解决方案2】:

    &lt;base href="/jobs"&gt; 添加到您的头部标签。它将指定根目录。

    这里有进一步的解释https://docs.angularjs.org/guide/$location

    【讨论】:

    • 当我在本地运行时,这不会将 URL 更改为不正确吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多