关于ASP.NET MVC路由

时间:2012-10-10 13:50:55

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

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

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)
}

所以问题是。如何配置像

这样的网址
/Search/{Filter.Id}_{Filter.Name}_{Filter.CreatTime}/

感谢您的帮助

3 个答案:

答案 0 :(得分: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]);

   // ...
}

答案 1 :(得分:1)

首先需要将以下路由添加到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等网址转到您的应用程序将触发路由,并且内置对象映射将负责将属性映射到模型,只要参数名称在路由中匹配属性的名称,它们可以成功地转换为相应的类型。

答案 2 :(得分:0)

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