Как установить маршрут по умолчанию (в область) в MVC - PullRequest
118 голосов
/ 26 января 2010

Хорошо, об этом уже спрашивали, но там нет твердого решения. Поэтому для себя и других, которые могут найти это полезным.

В MVC2 (ASP.NET) я хочу, чтобы, когда кто-то переходил на сайт, была указана область по умолчанию. Поэтому переход на мой сайт должен отправить вас в ControllerX ActionY в AreaZ.

Используя следующий маршрут в Global.asax

routes.MapRoute(
                "Area",
                "",
                new { area = "AreaZ", controller = "ControllerX ", action = "ActionY " }
            );

Теперь это работает, так как пытается найти правильную страницу. Однако MVC продолжает поиск View в корне сайта, а не в папке Area.

Есть ли способ решить эту проблему?

РЕДАКТИРОВАТЬ

Существует «Решение», и это в ControllerX, ActionY возвращает полный путь к представлению. Немного взломать, но это работает. Однако я надеюсь, что есть лучшее решение.

         public ActionResult ActionY()
        {
            return View("~/Areas/AreaZ/views/ActionY.aspx");
        }

Редактировать:

Это также становится проблемой при наличии HTML-ссылки ActionLink на странице. Если область не задана, ссылка на действие выводится пустой.

Все это задумано или является недостатком?

Ответы [ 13 ]

0 голосов
/ 14 февраля 2012

Что ж, хотя создание собственного движка просмотра может работать для этого, все же у вас может быть альтернатива:

  • Решите, что вам нужно показать по умолчанию.
  • Это что-то имеетконтроллер и действие (и область), верно?
  • Откройте регистрацию этой области и добавьте что-то вроде этого:
public override void RegisterArea(AreaRegistrationContext context)
{
    //this makes it work for the empty url (just domain) to act as current Area.
    context.MapRoute(
        "Area_empty",
        "",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "Area controller namespace" }
    );
        //other routes of the area
}

Приветствия!

0 голосов
/ 30 января 2010

Поиск различных строительных блоков выполняется в жизненном цикле запроса. Одним из первых шагов в жизненном цикле запроса ASP.NET MVC является сопоставление запрошенного URL-адреса с правильным методом действия контроллера. Этот процесс называется маршрутизацией. Маршрут по умолчанию инициализируется в файле Global.asax и описывает платформе ASP.NET MVC, как обрабатывать запрос. Если дважды щелкнуть файл Global.asax в проекте MvcApplication1, отобразится следующий код:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Routing;

namespace MvcApplication1 {

   public class GlobalApplication : System.Web.HttpApplication
   {
       public static void RegisterRoutes(RouteCollection routes)
       {
           routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

       }

       protected void Application_Start()
       {
           RegisterRoutes(RouteTable.Routes);
       }
   }

}

В обработчике событий Application_Start (), который запускается при компиляции приложения или перезапуске веб-сервера, регистрируется таблица маршрутов. Маршрут по умолчанию называется Default и отвечает на URL в виде http://www.example.com/{controller}/{action}/{id}. Переменные между {и} заполняются фактическими значениями из URL запроса или значениями по умолчанию, если в URL нет переопределения , Этот маршрут по умолчанию будет сопоставлен с контроллером Home и методом действия Index в соответствии с параметрами маршрутизации по умолчанию. У нас не будет никаких других действий с этой картой маршрутизации.

По умолчанию все возможные URL могут быть сопоставлены через этот маршрут по умолчанию. Также возможно создание собственных маршрутов. Например, давайте сопоставим URL http://www.example.com/Employee/Maarten с контроллером Employee, действием Show и параметром firstname. Следующий фрагмент кода может быть вставлен в только что открытый файл Global.asax. Поскольку платформа ASP.NET MVC использует первый соответствующий маршрут, этот фрагмент кода должен быть вставлен выше маршрута по умолчанию; в противном случае маршрут никогда не будет использоваться.

routes.MapRoute(

   "EmployeeShow",                    // Route name
   "Employee/{firstname}",            // URL with parameters
    new {                             // Parameter defaults
       controller = "Employee",
       action = "Show", 
       firstname = "" 
   }  

);

Теперь давайте добавим необходимые компоненты для этого маршрута. Прежде всего, создайте класс с именем EmployeeController в папке Controllers. Вы можете сделать это, добавив новый элемент в проект и выбрав шаблон класса контроллера MVC, расположенный под Web | Категория MVC. Удалите метод действия Index и замените его методом или действием с именем Show. Этот метод принимает параметр firstname и передает данные в словарь ViewData. Этот словарь будет использоваться представлением для отображения данных.

Класс EmployeeController будет передавать объект Employee в представление. Этот класс Employee должен быть добавлен в папку Models (щелкните правой кнопкой мыши на этой папке, а затем выберите Add | Class из контекстного меню). Вот код для класса Employee:

namespace MvcApplication1.Models {

   public class Employee
   {
       public string FirstName { get; set; }
       public string LastName { get; set; }
       public string Email { get; set; }
   }

} 
0 голосов
/ 27 января 2010
routes.MapRoute(
                "Area",
                "{area}/",
                new { area = "AreaZ", controller = "ControlerX ", action = "ActionY " }
            );

Вы пробовали это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...