Базовый контроллер для ASP.NET MVC - PullRequest
3 голосов
/ 20 января 2010

Есть ли способ создать реализацию базового контроллера, которая обрабатывает все маршруты?

IE / home / index и / about / index все указывают на один метод контроллера, который возвращает представление.

Сайт, который я создаю, на 90% статичен, и я не хочу создавать 50 контроллеров.

С кем все должно быть в порядке?

Ответы [ 4 ]

1 голос
/ 20 января 2010

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

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", new { controller = "Main" });
    }
}

public class AboutController : Controller
{
    public ActionResult Index()
    {
        return RedirectToAction("Index", new { controller = "Main" });
    }
}

public class MainController : Controller
{
    public ActionResult Index()
    {
        // Do something important.
        // Do something else important.
        return View();
    }
}

Чтобы создать AboutController, я просто скопировал HomeController и изменил имя класса на AboutController. Таким образом, вы сводите к минимуму усилия по обслуживанию маршрута, централизуете поведение, которое хотите централизовать, и по-прежнему позволяете себе адаптироваться к изменяющимся требованиям без необходимости отмены большого количества обходных путей. Если по истечении некоторого времени вам нужно изменить поведение определенного действия, вы просто переходите к этому действию и меняете код.

1 голос
/ 20 января 2010

Помните, что "controller" и "action" - это ключевые слова для системы маршрутизации, которая выполняет свою динамическую магию. Если вы просто замените параметр «controller» в вашем маршруте на другое имя параметра, вы всегда можете использовать контроллер по умолчанию.

routes.MapRoute("Default",
                "{whatever}/{action}/{id}",
                new { controller="Home", action="Index", whatever="", id="0" } );

Обратите внимание, что каждый метод должен обрабатывать параметр "what".

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

Поскольку вы не собираетесь сопоставлять контроллеры или методы, основанные на URL, вам просто нужно захватить пару параметров, а затем что-то с ними сделать.

 routes.MapRoute( 
     "MyNewRoute", 
     "{firstParameter}/{secondParameter}",
     new {controller="Home", action="Index"} 
 ); 

 public ActionResult Index(string firstParameter, string SecondParameter)
 {
     if (firstParameter == "Home")
     {
        // Do something
     }
 }
0 голосов
/ 20 января 2010

да, с правильной маршрутизацией в вашем файле global.asax вы можете сделать это. Но вам будет трудно управлять сайтом через некоторое время для рефакторинга или по любой другой причине. Вот, чтобы узнать маршрутизацию в asp .net mvc: http://www.asp.net/learn/mvc/#MVC_Routing

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