我正在编写一个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将在虚拟目录中运行。
答案 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>
这样,您的网址就会独立于托管的虚拟目录。