Может ли сайт ASP.NET MVC2 иметь дополнительный параметр enum route? Если да, можем ли мы установить это значение по умолчанию, если оно не указано? - PullRequest
7 голосов
/ 05 августа 2010

Могу ли я иметь маршрут как ...

routes.MapRoute(
    "Boundaries-Show",
    "Boundaries",
     new 
     {
         controller = "Boundaries", 
         action = "Show",
         locationType = UrlParameter.Optional
     });

Где метод действия ...

[HttpGet]
public ActionResult Show(int? aaa, int? bbb, LocationType locationType) { ... }

, и если человек не предоставляет значение для locationType .., тогда по умолчанию оно равно LocationType.Unknown.

Возможно ли это?

Обновление # 1

Я сократил метод действия, чтобы он содержал ОДИН метод (только пока я не заработал). Теперь это выглядит так ...

[HttpGet]
public ActionResult Show(LocationType locationType = LocationType.Unknown) { .. }

.. и я получаю это сообщение об ошибке ...

Словарь параметров содержит неверная запись для параметра 'locationType' для метода «System.Web.Mvc.ActionResult Показать (MyProject.Core.LocationType) 'в 'MyProject.Controllers.GeoSpatialController. Словарь содержит значение введите 'System.Int32', но параметр требует значения типа 'MyProject.Core.LocationType. Имя параметра: параметры

Не думает ли, что необязательный параметр маршрута LocationType - это int32, а не пользовательский Enum?

Ответы [ 2 ]

6 голосов
/ 05 августа 2010

Вы можете указать значение по умолчанию, например:

public ActionResult Show(int? aaa, int? bbb, LocationType locationType = LocationType.Unknown) { ... }

ОБНОВЛЕНИЕ:

Или, если вы используете .NET 3.5:

public ActionResult Show(int? aaa, int? bbb, [DefaultValue(LocationType.Unknown)] LocationType locationType) { ... }

ОБНОВЛЕНИЕ 2:

public ActionResult Show(int? aaa, int? bbb, int locationType = 0) {
  var _locationType = (LocationType)locationType;
}

public enum LocationType {
    Unknown = 0,
    Something = 1
}
0 голосов
/ 05 августа 2010

Вы можете добавить атрибут DefaultValue к своему методу действия:

[HttpGet]
public ActionResult Show(int? aaa, int? bbb, [DefaultValue(LocationType.Unknown)]LocationType locationType) { ... }

или использовать дополнительные параметры в зависимости от используемой языковой версии:

[HttpGet]
public ActionResult Show(int? aaa, int? bbb, LocationType locationType = LocationType.Default) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...