2009-09-24 118 views
0

我建設使用默認的URL路徑 «/ {控制器}/{行動}/{ID}».NET MVC自定義類型

我的問題一個asp.net MVC應用程序與此路線中的最後一項,即身份證號。 mvc框架會自動將任何內容放入id中,以便在操作中聲明的參數的類型。

例如:

網址:/ myController的/ myaction/1

公共類myController的:控制器 {

public ActionResult myaction(int id) 
    { 
     // it works id == 1 
    } 

}

但是,如果我在動作聲明一個參數自定義類型的mvc框架無法將路由的最後部分映射到參數。

例如:

網址:/ myController的/ myaction/xpto

公共類myController的:控制器 {

public ActionResult myaction(MyType id) 
    { 
     // it fails to cast "xpto" to my type 
    } 

}

哪裏應在框架挖掘教它如何做到這一點?

回答

2

將模型聯編程序處理從路由數據到動作參數的值的綁定。毫不奇怪,默認的模型聯編程序是DefaultModelBinder。如果這種類型不會在你的路線,你的MyType類型的值綁定,那麼你有兩種選擇:

  • 更改一個要傳遞的路線,這樣DefaultModelBinder可以將其轉換爲MyType的實例,不包括日期修改或
  • 編寫自定義模型聯編程序,並將其設置爲MyType類型的模型聯編程序。如果你使用Google ASP.NET MVC和模型綁定器,你會發現這個例子。
+0

太棒了!而已! 我認爲Model Binder只適用於Forms。 – Gnomo 2009-09-24 13:28:56