在Javascript中的Url Helper ASP.NET MVC

时间:2014-10-25 16:11:56

标签: javascript asp.net-mvc json

我正在编写一个js脚本,该脚本读取包含我的Web应用程序的所有导航菜单链接的文件JSON。 菜单树是这样的:

1 - DASHBOARD - dashboard
2 - SETTINGS
    2.1 - GENERAL - settings/general
    2.2 - LAYOUT - settings/layout
3 - DATABASE
    3.1 - QUERY
       3.1.2 - EDITOR - database/query/editor
       3.1.3 - TEST - database/query/test
menù是3级嵌套链接。

如何在JSON文件中编写链接以避免“not found”,例如在“DASHBOARD”中,想要转到SETTINGS > GENERAL

我不想使用绝对路径,我的webapp将在虚拟目录中运行。

2 个答案:

答案 0 :(得分:0)

您应该使用Url.Content("~/")see documentation)来获取应用的绝对网址。例如,如果您在名为MyApp的虚拟目录中运行应用程序,并且在About/Me中有一个页面,则可以使用:

string url = Url.Content("~/About/Me"); // this will return '/MyApp/About/Me'

答案 1 :(得分:0)

如果可以,我会建议修改您的JSON响应以包含您的应用托管的基本路径。

string basePath = string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));

例如:basePath + "database/query/editor"而不是database/query/editor

如果您无法修改JSON响应,则可以从MVC的JavaScript变量中获取应用程序托管的基本路径。

_Layout.cshtml文件中 - 或者每次加载应用程序时加载的文件 - 在JS变量中设置应用程序运行的基本路径:

<script type="text/javascript">
    window.applicationBaseUrl = @Html.Raw(HttpUtility.JavaScriptStringEncode(Url.Content("~/"), true));
</script>

现在,当您收到包含URL的JSON时,请将它们与您的基本路径连接起来:

var queryEditorUrl = window.applicationBaseUrl + <the path from your JSON>

这样,您的网址就会独立于托管的虚拟目录。

相关问题