Проблема маршрутизации подпапок доменов - PullRequest
1 голос
/ 27 марта 2010

Я довольно новичок в ASP.NET MVC и надеюсь, что это не слишком глупый вопрос.Вот и все.

У меня есть ...

Моя проблема ...

  • маршрутизация моего приложения (все работало без использования подпапки после имени домена).Домашняя страница приложения загружается неплохо, с файлами CSS, но без ресурсов, таких как изображения (определенные в файлах CSS) и без вызовов jQuery ajax, аналогичных / mycontroller / myaction
  • ссылкиработает только один раз (во второй раз я получаю страницу, похожую на эту ссылку: http://mydomain/mysubfoler1/myappfolder/myController/myController/myAction)
  • вызовы jquery ajax не работают. (У меня есть дополнительные js-файлы в папке скриптов, которые вызывают несколько действий контроллера. pe


$.getJSON("../mycontroller/myaction/" + id, function(figure) {
    // do something
    });



Вот мой Global.asax управление маршрутизацией:

public static void RegisterRoutes(RouteCollection routes)

{

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(    
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "myController", action = "Index", id = "" }
        defaults    
    );

    routes.MapRoute(    
        "Root",
        "",
        new { controller = "myController", action = "Index", id = "" }   
    );    
}

protected void Application_Start()    
{    
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new MyApplicationWeb.LocalizationWebFormViewEngine());
    RegisterRoutes(RouteTable.Routes);
    //RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);
}

Любые предложения? Моим первым предложением было использование таких областей, как:

"mysubfolder1/myappfolder/{controller}/{action}/{id}"

(но без удачи)

Большое спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 27 марта 2010

Каждый запрос к вашему приложению будет разбит на URL-токены между символами косой черты. Маршрут "{controller}/{action}/{id}" будет соответствовать первым трем сегментам URL-адреса после домена.

Таким образом, добавление подпапки нарушит работу вашего приложения, поскольку подпапка будет интерпретироваться как аргумент контроллера. Когда вы говорите, что использовали "" mysubfolder1 / myappfolder / {controller} / {action} / {id} "без какой-либо удачи, что вы имеете в виду? Это будет простой способ, который должен работать для вас.

Когда вы говорите, что ваши ссылки не работают, я предполагаю, что вы, вероятно, генерируете их неправильно. Вы должны использовать методы Url.Action и Url.Content для правильной генерации ссылок внутри вашего приложения - это предотвращает их разрыв при перемещении папок и таблиц маршрутизации.

1 голос
/ 27 марта 2010

... css файлы, но без ресурсов, таких как изображения (определенные в файлах CSS) и без вызовов JQuery AJAX, аналогичных / Mycontroller / MyAction

Вам необходимо отредактировать все ссылки на изображения или URL-адреса jQuery / CSS. ASP.NET MVC маршрутизация работает только для входящих веб-запросов, и поскольку ваши CSS-файлы являются статическими, любые изображения, на которые ссылается background-image: url('../images/background.png'), будут относиться к папке, в которой находится CSS-файл.

Как указано в других ответах, в любых View (файлах .ascx и .aspx) используйте <%= Url.Action("ActionName") %> для создания правильных URL-адресов на основе вашей маршрутизации. Аналогично, используйте <%= Url.Content("~/folder/something.png") %> для генерации ссылок на что-либо на вашем веб-сервере (изображения, CSS, JS и т. Д.).

Но вы не можете использовать их в файлах .css и .js, потому что они не анализируются с помощью механизма просмотра ASP.NET WebForms.


ОБНОВЛЕНИЕ согласно комментарию:

Поскольку ASP.NET не отвечает за обслуживание статических файлов, таких как .css и .js, вам необходимо жестко закодировать URL-адреса для действий / контроллеров в файлах.

Альтернативный, но, возможно, грязный подход заключается в размещении строк внутри ваших .css / .js файлов, которые можно легко отличить (например: {someAction}) вместо фактического URL, а затем сделать любой .css или .js ссылка на файл указывает на action на controller. Затем действие будет принимать соответствующий файл, заменять все строки в нем соответствующими URL-адресами, а затем выводить его обратно пользователю. Затем вы использовали бы следующее, чтобы подать файлы

return Content(fileText, "text/css"); // or "text/javascript"

Другой метод - поместить любые CSS / JS в отдельное представление (без главной страницы), что позволяет использовать Html и Url Helpers. Затем вы можете обслуживать эти файлы, просто возвращая соответствующий вид с соответствующим кодом. Примечание: убедитесь, что вы установили правильный ContentType, см. ASP.NET MVC и тип содержимого text / xml

1 голос
/ 27 марта 2010

У меня были похожие проблемы с содержимым, которое загружалось неправильно, и использование класса UrlHelper смогло исправить мои проблемы. Этот помощник сгенерирует правильные URL для вашего контента, ссылок и т. Д.

<%=Url.Content("~/Content/Images/image.jpg")%>
<%=Url.Action("MyAction")%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...