C # 3.5 MVC2 маршрутизация пропустить необязательный параметр - PullRequest
0 голосов
/ 06 июля 2010

Здесь у меня есть:

routes.MapRoute(
    "test", // Route name
    "DataWarehouse/Distribution/{category}/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional } 
);

Категория и серийный номер - оба являются необязательными параметрами.Когда маршрутизация имеет вид: DataWarehouse/Distribution/123, она всегда обрабатывает 123 как значение для категории.

Мой вопрос заключается в том, как я могу узнать, что 1-й параметр может быть категорией или серийным номером, то есть DataWarehouse/Distribution/{category} и DataWarehouse/Distribution/{serialNo}.

Ответы [ 3 ]

0 голосов
/ 06 июля 2010

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

Например, если ваш сериал 1234-1234-1234 и ваша категория не такая:

routes.MapRoute(
    "serialonly", // Route name
    "DataWarehouse/Distribution/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional },
    new{serialNo = @"\d{4}-\d{4}-\d{4}"} 
);

routes.MapRoute(
    "test", // Route name
    "DataWarehouse/Distribution/{category}/{serialNo}",
    new { controller = "DataWarehouse", 
          action = "Distribution", 
          category= UrlParameter.Optional, 
          serialNo = UrlParameter.Optional },
    ,
    new{serialNo = @"\d{4}-\d{4}-\d{4}"}  
);
0 голосов
/ 06 июля 2010

У меня была похожая проблема, я пытался маршрутизировать на основе данных ({year}/{month}/{day}), где month или day могут быть необязательными. Я обнаружил, что не могу сделать это ни одним маршрутом. Таким образом, я решил это, используя 3 маршрута, от общего к конкретному (год, год и месяц, год и месяц и день). Я не совсем доволен этим, но это работает.

Итак, при условии, что вы ищете маршруты DataWarehouse/Distribution/{category} и DataWarehouse/Distribution/{category}/{serialNo}, я думаю, это будет работать для вас.

0 голосов
/ 06 июля 2010
DataWarehouse/Distribution/{category}/{serialNo}

Только последний параметр может быть необязательным. В этом примере категория не может быть необязательной по очевидным причинам.

...