href путь в aspx файлах в области - PullRequest
0 голосов
/ 05 октября 2009

Я постоянно тестирую новую функцию ASP.NET MVC 2 Preview 2, которая называется «Области в одном проекте». В настоящее время у меня проблема со ссылками на файлы CSS и JS из кода aspx.

Когда URL указывает на URL без идентификатора, все работает нормально:

http://mysite.com/area/controller/action

Проблема возникает, когда URL содержит параметр:

http://mysite.com/admin/controller/action/id

тогда страница не может найти файлы css и js из / content и /scripts.

Я думаю, что проблема связана с маршрутизацией. У меня установлены стандартные правила маршрутизации, например:

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

        AreaRegistration.RegisterAllAreas();

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

и в конфиге маршрута области:

        public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" }
            );
    }

Пример href ресурса в файле aspx:

    <link href="../../Content/datatables.css" rel="stylesheet" type="text/css" />

Кто-нибудь может предложить решение, чтобы решить проблему плохого ресурса href?

Ответы [ 2 ]

1 голос
/ 05 октября 2009

Когда вы используете маршрутизацию URL, вы не знаете, как много / path / parts будет в вашем URL заранее. Таким образом, вы вообще не можете использовать относящиеся к пути URL-адреса: вы не знаете, сколько сегментов «..» вам понадобится.

Вместо этого используйте корневые URL-адреса:

<link href="/Content/datatables.css" rel="stylesheet" type="text/css" />

Если ваше приложение может быть смонтировано по некорневому URL-адресу (например, под одним из ваших area s, вы должны вывести имя этой области как часть корневого URL-адреса. (Предположительно, это получается с помощью AreaRegistrationContext.AreaName .)

0 голосов
/ 06 октября 2009

Как насчет этого, установить атрибут runat = "server".

<head runat="server">
  <link href="~/Content/datatables.css" rel="stylesheet" type="text/css" runat="server" />
  ...
...