在asp.net mvc中动态类型转换编辑动作:如何处理多个数据类型而不抛出异常?

问题描述:

我正在为我设计的数据对象制作一个通用的MVC查看器/编辑器,模仿ActiveRecord。在asp.net mvc中动态类型转换编辑动作:如何处理多个数据类型而不抛出异常?

数据对象是完全通用的,它们可以有主键,字符串,int,int16s,无论数据库使用什么(该组织的持久层使用各种数据类型作为主键,我希望这个MVC“浏览器/编辑器“来处理它们)。

创建的索引视图编辑链接很简单:

Response.Write("<td>" + Html.ActionLink("Edit", "Edit", new { id = pkValue }) + "</td>"); 

的问题是在另一边,在编辑动作:

public ActionResult Edit(object id) 

字符串以外的任何抛出一个异常当我尝试将id作为参数数组的唯一元素传递给通过反射调用的静态“select”方法以检索水合数据对象以从数据库编辑时:

object[] parameters = { id }; 
list = (List<T>)select.Invoke(null, parameters); 

我知道CLR类型的参数,我知道object id的“真实”类型。我是否应该使用某种粗糙的case语句来手动进行类型转换,还是有一种技巧可以用来使用参数的类型进行类型转换?

可以/我应该超载ActionResultEdit()采取intint16int32等?

我该怎么做才能确保无论“真实”类型的id,我都可以将它传递到数据库中,而不会抛出异常?

这里是我试过到目前为止:

我做我的通用控制器采取两种类型的参数,一个是数据对象,另一个是主键的数据类型:

public class CoreDataController<t,T> : Controller where T:IDataObjectBase<T> 

然后我试图此举:

id = (t)id; 
object[] parameters = { id}; 

BZZZRT! “指定的演员无效”。 id"2"tint?

你能为选择方法和您正在执行到拉数据的存储过程或查询提供更多的代码的详细信息。

我现在会建议传递id参数的值来按以下方式选择。

if(id != null) 
    Select(id.ToString());