MVC маршрутизация с необязательным параметром - PullRequest
4 голосов
/ 25 марта 2011

У меня настроен этот маршрут:

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

Но в моем контроллере я не знаю, как получить необязательный параметр id. Может кто-нибудь объяснить, как я могу получить доступ к этому и как я имею дело с присутствием или отсутствием.

Спасибо

Ответы [ 2 ]

16 голосов
/ 25 марта 2011

Вы можете написать свой actionmethod как

public ActionResult index(int? id)
{
   if(id.HasValue)
   {
       //do something  
   }
   else
   {
      //do something else
   }
}
8 голосов
/ 06 апреля 2011

Как избежать обнуляемых параметров действия (и if операторов)

Как вы видели по ответу @ Мухаммеда (кстати, тот, который должен быть принят в качестве правильного ответа), легко получить дополнительные параметры (фактически любые параметры маршрута) в действиях контроллера. Все, что вам нужно, это убедиться, что они обнуляемы (потому что они необязательны).

Но так как они не являются обязательными, вы получаете разветвленный код, который сложнее выполнить модульное тестирование. Следовательно, используя простой селектор метода действия, можно написать что-то похожее на это:

public ActionResult Index()
{
    // do something when there's not ID
}

[RequiresRouteValues("id")]
public ActionResult Index(int id) // mind the NON-nullable parameter
{
    // do something that needs ID
}

В этом случае использовался селектор метода настраиваемого действия, и его код и подробное объяснение можно найти в моем блоге . Такие действия легко понять / понять, выполнить модульное тестирование (без ненужных веток) и поддерживать их.

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