如何让JS了解应用程序根



我有一些javascript在MVC项目中引用/jobs/GetIndex。当我在本地运行它时,这非常有效,因为我有一个名为JobsControllerController。当我部署它时,我会将应用程序部署到"Jobs"子文件夹中,这意味着URL应该变成http://site/jobs/jobs/GetIndex,但我认为它会变成http://site/jobs/GetIndex,因为javascript不知道"根URL"是什么,而是使用网站作为根。如何使它在这两种环境中都能工作?

如果你只是想获得网站的根/基url,这样你就可以附加它来获得你想要的另一个url,你可以简单地使用/作为url的第一个字符。

var urlToJobIndex2= "/jobs/GetIndex";

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

您可以在剃刀视图中使用Url.Contenthelper方法生成应用程序库的url,将其分配给一个javascript变量,并在其他js代码中使用该方法来构建其他url。执行此操作时,请始终确保使用javascript命名空间,以避免全局javascript变量可能出现的问题

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

因此,在您的剃刀视图(布局文件或特定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";

这里有一个关于相同的详细答案,但在特定的页面/视图中使用

角度Js

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

<base href="/jobs">添加到head标签中。它将指定根。

这将在此处进一步解释https://docs.angularjs.org/guide/$location

最新更新