2014-10-25 3 views
0

Я пишу скрипт js, который читает файл JSON, содержащий все ссылки навигации для моего веб-приложения. дерево меню что-то вроде этого:Url Helper ASP.NET MVC в Javascript

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 

меню будет 3 уровней вложенных ссылку.

Как написать ссылки в файле JSON, чтобы избежать «not found», когда, например, в «DASHBOARD» и хотите перейти на SETTINGS > GENERAL.

Я не хочу использовать абсолютный путь, мой webapp будет работать в виртуальном каталоге.

+1

Совершенно неясно, что вы здесь делаете. –

ответ

0

Если вы можете, я wolud предложить модифицируя ответ JSON, чтобы включить базовый путь вашего приложения размещен на.

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

Например: basePath + "database/query/editor" вместо database/query/editor.

Если вы не можете изменить ответ JSON, вы можете получить базовый путь, в котором размещено ваше приложение, в переменной JavaScript из вашего MVC.

В вашем _Layout.cshtml файле - или любой другой файл, который загружается каждый раз, когда ваше приложение загружается - установить базовый путь, что приложение работает под в переменной JS:

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

Теперь, когда вы получаете JSON, содержащий URL-адрес, сцепить их с базовым путем:

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

Таким образом, ваши URL-адрес не зависит от виртуального каталога он размещен на.

0

Чтобы получить абсолютный URL вашего приложения, вы должны использовать Url.Content("~/") (see documentation). Например, если вы запустите приложение в виртуальном каталоге под названием MyApp и у вас есть страница в About/Me вы можете использовать:

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