none
Относительные пути ASP.NET MVC RRS feed

  • Вопрос

  • Добрый день. Помогите пожалуйста. У меня есть портал написаный на ASP.NET MVC. Ссылки я всегда указывал типа "/Controller/View" и все отлично работало, даже для доменов третьего уровня типо app.domen.com/Controller/View и для доменов с разными портами. Но теперь предстоит иная задача, посадить сайт на домен с названием приложения типа domen.com/AppName/Controller/View.

    Каким же образом мне делать ссылки? Пробовал так: /AppName/Controller/View и все работает, только вот AppName может быть разный. Пробовал ./Controller/View, работает на IIS, но локально нет. Пробовал ~/Controller/View: вообще ничего не работает. Единственное, что помогло: @Url.Content("") и с его помощью работает ВЕЗДЕ и ВЕЗДЕ ПРАВИЛЬНО! Но мне так не хочется переделывать везде на Url.Content + в JavaScript`е как указывать ссылки? Если липить в ждаваскрип @, то intellisense откажет, да и студия будет свитить предупреждениями, типо внимание динамическая последовательность.

    А что бы сделали вы? Дайте совет

    17 апреля 2014 г. 3:28

Ответы

  • "Но мне так не хочется переделывать везде на Url.Content" -  в случае серверного кода так и делается.

    "но если скрипт подключаемый, то он съест это текстом и не найдет такого пути... Помогите пожалуйста, что делать?" - тут способов много. Лично мы применяем следующий: задаётся глобальная переменная js и ей присваивается название корня сайта, а потом, остальные пути строятся при помощи неё. Использовать window.location.pathname тоже вариант.


    Сделаем содержимое сообщества лучше, вместе!

    18 апреля 2014 г. 6:17
    Модератор
  • Уже так и сделал)

      $(function () {
                window.MainUrl = "@Url.Content("~/")";
            });

    и теперь с каждом ajax запросе приходится дописывать:

    url: window.MainUrl + 'Controller/Action'

    Спасибо!

    18 апреля 2014 г. 6:20

Все ответы

  • Для более удобного понимания где ссылка <a href="/Controller/Method"> 

    1) Для домена MyDomain.com - работает, в итоге получаю MyDomain.Com/Controller/Method, это локально на IIS Express

    2) Для домена с названием приложения MyDomain.com/MyApp - не работает, получаю ссылку вида: MyDomain.Com/Controller/Method, а должен получить MyDomain.com/MyApp/Controller/Method

    3) С использованием @Url.Content() - работает, на IIS получаю MyDomain.com/MyApp/Controller/Method,

    На IISExpress (локально) получаю localhost/Controller/Method Вроде бы все это нас удовлетворяет, но что же делать в MyScript.js ?? :

     $.ajax({
            url: '/Controller/Method'

    Если скрипт на View, конечно можно заменить на url: '@Url.Content("/Controller/Method")' , но если скрипт подключаемый, то он съест это текстом и не найдет такого пути... Помогите пожалуйста, что делать?

    P.S window.location.pathname берется вместе с MyApp

    17 апреля 2014 г. 5:37
  • "Но мне так не хочется переделывать везде на Url.Content" -  в случае серверного кода так и делается.

    "но если скрипт подключаемый, то он съест это текстом и не найдет такого пути... Помогите пожалуйста, что делать?" - тут способов много. Лично мы применяем следующий: задаётся глобальная переменная js и ей присваивается название корня сайта, а потом, остальные пути строятся при помощи неё. Использовать window.location.pathname тоже вариант.


    Сделаем содержимое сообщества лучше, вместе!

    18 апреля 2014 г. 6:17
    Модератор
  • Уже так и сделал)

      $(function () {
                window.MainUrl = "@Url.Content("~/")";
            });

    и теперь с каждом ajax запросе приходится дописывать:

    url: window.MainUrl + 'Controller/Action'

    Спасибо!

    18 апреля 2014 г. 6:20