2012-10-10 76 views
1

比如我得到一個過濾器模型:關於ASP.NET MVC路線

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

所以問題is.How配置URL喜歡

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

謝謝您的幫助

回答

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]); 

    // ... 
} 
+0

斯蒂芬勞埃德的答案應該由接受的答案。 –

0

用細繩或改變_元/ {Filter.Id}/{Filter.Name}/{Filter.CreatTime}

+0

根據路由映射的可能性,** Id_Name **和** Id/Name **之間的區別是什麼? –

+0

Id_Name是一個字符串Id/Name是url的兩個部分。路由不會拆分字符串,只需要部分url並放入變量 –

+2

我不這麼認爲。在URL模式中,通過將它們括在大括號({和})中來定義佔位符。您可以在一個段中定義多個佔位符,但它們必須用文字值分隔。例如,{language} - {country}/{action}是有效的路由模式。 [源(http://msdn.microsoft.com/en-us/library/cc668201(V = VS.100)的.aspx) –

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之類的URL轉到您的應用程序將觸發路線,並且內置對象映射將負責映射屬性只要路徑中的參數名稱與屬性的名稱匹配,並且它們可以成功轉換爲相應的類型,就可以將它們轉換爲模型。