2010-10-15 60 views
1

我想在MVC中设计一个解决方案,其中一个类的字符串表示形式被传递给控制器​​,然后应该与所有的控制器构建一个网格在DB中属于该类的数据。 (我使用ORM将类映射到表)。从类型的字符串表示动态生成一个特定类型的Enumerable对象

 //A method in the Model that populates the Item Property 
    foreach (MethodInfo method in sDRMethods) 
    { 
     if (method.Name.Contains(_domainTable)) 
     { 
      Items = method.Invoke(repositoryObject, null); 
      break; 
     } 
    } 

//View uses this Items property of the Model to populate the grid. 
public object Items; 

//_domainTable is the name of the table/class (in string format). 
//repositoryObject is the object that has methods to return IEnumerable<class> collection object of each type. 

我遇到的问题是我不知道如何在我的视图中投射“Items”属性来遍历它并构建网格。

我曾尝试使用“http://mvcsharp.wordpress.com/2010/02/11/building-a-data-grid-in-asp-net-mvc/”,但通用扩展方法期望知道它应该使用的特定类型。我倾向于使用MVC,但它看起来像我不能轻易地有这个工作(这是很难相信)。

+0

是否有更多的代码没有发布但正在使用? – jfar 2010-10-15 12:19:12

+0

是的,但我不认为这很重要。缺少的代码是执行上述代码的方法的“调用”。和这样做的观点: – Aaron 2010-10-18 11:25:21

+0

Switch(_domainTable){case“systemLookUpTable1”:return(IEnumerable )Model.Items; ....}我真的不喜欢这个视图中的switch语句! – Aaron 2010-10-18 11:27:26

回答

1

我真的不喜欢你想要做的事情的声音。为什么要将表转换为字符串?

只有当您转换为字符串时,才会呈现视图。而且,在大多数情况下,应该留给MVC框架。

你提到的代码使用HtmlTextWriter,这很好,因为它会直接呈现给响应。

但是,听起来好像您试图通过将所有内容呈现为字符串来重新发明轮子,而不是将其留给框架。

请注意,在MVC中,视图只是用于呈现字符串的模板,也就是说,如果我已经理解了您,您确实需要什么。因此,如果我已经远程理解你正在尝试做什么,并且由于你的帖子不明确,所以你应该通过你的类作为强类型模型的一部分来查看,然后写一些基本设计逻辑进入视图。

如果我是对的,这是不确定的,我想你误解了MVC的工作原理。

看看如何使用视图来渲染模型中的数据的几个例子。该模型可以是任何类,它可以是一个IEnumerable,一个列表,无论如何,你可以在视图中使用foreach循环来渲染出你想要的东西,你想要的东西。

从这个意义上说,MVC与在普通香草ASP.NET中编写自定义控件有很大的不同。

0

谢谢你的回复awrigley。

要求很简单。我也许在我的文章中听起来非常复杂。

在索引视图上,我必须使用系统查找应用程序的所有表填充下拉列表。应用程序的“管理员”从下拉列表中选择一个项目,该项目应该在网格中显示该表格的内容,以便管理员可以使用该网格执行CRUD操作。

我想要做的是,将选定的项目(这是表的名称)传递给控制器​​,然后将其传递给ViewModel类。这个类使用反射来调用(在我原来的问题所示的代码),这已经得到了类似的方法存储库的正确的方法:

公共IEnumerable的GetAllTable1Data(){ ..... }

的我遇到的问题是,当我调用方法时,它会返回一个类型“对象”,我不能将其转换为任何特定的对象,因为我不知道应该将其转换为的具体类型。当这个对象传递给视图时,网格期望IEnumerable或IEnumerable,但我不知道这些信息。我不能做到这一点:

(IEnumerable的)method.Invoke(repositoryObject,NULL)

我得到:无法施展了IEnumerable到IEnumerable的

我(种)具有网格现在显示,但我在那张视图中使用switch语句:

开关(SLU_Type) { 案 “SLU_Table1”:Html.Grid((IEnumerable的)Model.Items); case“SLU_Table2”:Html.Grid((IEnumerable)Model.Items); ..... }

我不喜欢这个,感觉不对,但我找不到一个体面的方式!

我可以为每个系统查找表部分视图,但为此,我必须添加大约30个部分视图,并使用几乎完全相同的代码来执行操作&视图。这似乎也不错!

希望这可以让你更好地理解我想达到的目标。

相关问题