代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

ASP.NET MVC2站点能否具有可选的枚举路由参数?如果是,如果没有提供,我们可以默认该值吗?

  •  7
  • Pure.Krome  · 技术社区  · 14 年前

    能给我一条像…

    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号

    我已经将action方法剥离为包含一个方法(直到我完成这个工作)。现在看起来像这样……

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

    …我收到这个错误消息…

    参数字典包含 参数条目无效 方法的“locationType” 'system.web.mvc.actionResult'系统.web.mvc.actionResult 在中显示(myproject.core.locationType)' “myproject.controllers.geospatialController”。 字典包含值 键入“System.Int32”,但参数 需要类型的值 “myProject.core.locationType”。 参数名称:参数

    是否认为可选路线参数 LocationType 是Int32而不是自定义 Enum ?

    2 回复  |  直到 14 年前
        1
  •  6
  •   Fabian    14 年前

    您可以提供这样的默认值:

    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
    }
    
        2
  •  0
  •   Matt B    14 年前

    可以将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) { ... }