2012-06-18 3 views
3

У меня есть контроллер под названием Diary с действием под названием View.asp.net mvc - Как настроить параметры по умолчанию в маршрутизации

Если я получаю URL в виде «Дневник/2012/6» Я хочу, чтобы вызвать View действие с year = 2012 и month = 6.

Если я получаю URL в виде «Дневник «Я хочу, чтобы это вызвало действие View с year = [текущий год] и month = [номер текущего месяца].

Как настроить маршрутизацию?

ответ

2

В маршрутах, вы можете использовать следующее:

routes.MapRoute(
       "Dairy", // Route name 
       "Dairy/{year}/{month}", // URL with parameters 
       new { controller = "Dairy", action = "Index", year = DateTime.Now.Year, month = DateTime.Now.Month }); 

Если год/месяц не предусмотрены, текущие значения будут отправлены , Если они предоставлены, то эти значения будут использоваться маршрутом.

  • /Молочные продукты/-> год = 2012, месяц = ​​6
  • /Молочные продукты/1976/04 -> год = 1976, месяц = ​​4

EDIT

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

global.asax

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Default", // Route name 
     "Dairy/{year}/{month}", // URL with parameters 
     new { controller = "Dairy", action = "Index", year = DateTime.Now.Year, month = DateTime.Now.Month } // Parameter defaults 
    ); 

} 

DairyController

public ActionResult Index(int year, int month) 
{ 
    ViewBag.Year = year; 
    ViewBag.Month = month; 
    return View(); 
} 

Взгляд

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

Month - @ViewBag.Month <br/> 
Year - @ViewBag.Year 

Результаты:

  • /Молочные продукты/1976/05 -> Выходы 1976 за год и 5 за месяц
  • /-> Выходы 2012 за год и 6 за месяц
+0

Если я не задаю параметры в URL-адресе, я получаю старый словарь параметров, содержащий null-запись 'schtick. – David

+0

@David - У вас есть другие маршруты, которые могут быть с этим? Я только что создал новый проект с использованием вышеизложенного и не имел проблем с параметрическим словарем. – Tommy

+0

О, интересно. Я удалю другие маршруты и проверю. – David

2
routes.MapRoute(
    "DiaryRoute", 
    "Diary/{year}/{month}", 
    new { controller = "Diary", action = "View", year = UrlParameter.Optional, month = UrlParameter.Optional } 
); 

и действие контроллера:

public ActionResult View(int? year, int? month) 
{ 
    ... 
} 
+0

Если я не поставить параметры в URL, я получить старый словарь параметров содержит null entry 'schtick. – David

+0

Вы заметили, как я объявил параметры как целые числа с нулевым значением в сигнатуре действия => 'int?' Вместо 'int'? Вы сделали то же самое? –

+0

Прости, плохо, ты прав. Я отмечаю ответ Tommy, потому что настройка значений по умолчанию обрабатывается в маршрутизации, которую я предпочитаю. Спасибо. – David

Смежные вопросы