2009-09-24 121 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