【问题标题】:About ASP.NET MVC route关于 ASP.NET MVC 路由
【发布时间】:2012-10-01 00:29:20
【问题描述】:

比如我得到一个过滤器模型:

public class  Filter
{
   public int  Id{get;set;}
   public  string Name{get;set;}
  public  DateTime CreateTime{get;set;}
}

还有一个 SearchController 动作,例如:

public  ActionResult  Search(Filter  filterModel)
{
      List<Model>  model =SampleBll.get(filterModel)
}

所以问题是。如何配置 URL 之类的

/Search/{Filter.Id}_{Filter.Name}_{Filter.CreatTime}/

感谢您的帮助

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing maproute


    【解决方案1】:

    您可以将{Filter.Id}_{Filter.Name}_{Filter.CreatTime} 视为string filter 并在您的控制器中对其进行解析。

    public ActionResult Search(string filter)
    {
       var parts = filter.Split("|".ToCharArray());
    
       Filter model = new Filter();
       model.Id = Int32.Parse(parts[0]);
    
       // ...
    }
    

    【讨论】:

    • Stephen Lloyd 的回答应该是被接受的。
    【解决方案2】:

    您首先需要将以下路由添加到您的 Global.asax.cs RegisterRoutes 方法中,默认路由之前:

    routes.MapRoute(
        "Search", // Name
        "Search/{Id}_{Name}_{CreateTime}", // url format
        new { controller = "Search", action = "Search" } // Defaults
        );
    

    完成此操作后,使用诸如/Search/123_Test_06-01-2011 之类的 url 访问您的应用程序将触发路由,并且内置对象映射将负责将属性映射到模型,只要参数名称在route 匹配属性的名称,它们可以成功地转换为相应的类型。

    【讨论】:

      【解决方案3】:

      使用字符串或更改 _ per / {Filter.Id}/{Filter.Name}/{Filter.CreatTime}

      【讨论】:

      • Id_NameId/Name 在路由映射可能性方面有什么区别?
      • Id_Name 是一个字符串 Id/Name 是一个 url 的两个部分。路由不会拆分字符串,只需将部分 url 放入变量中
      • 我不这么认为。在 URL 模式中,您可以通过将占位符括在大括号( { 和 } )中来定义占位符。您可以在一个段中定义多个占位符,但它们必须用文字值分隔。例如,{language}-{country}/{action} 是一个有效的路由模式。 source
      猜你喜欢
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多