我有一个通用列表List< T>我想创建一个迭代列表并吐出输出的视图。
我遇到了几个问题:
例如,如果我传入一个CustomObject1列表,那么我想渲染部分CustomObject1.ascx,如果我传入一个CustomObject2列表,我想渲染部分CustomObject2.ascx。
有一种简单的方法可以做到这一点我忽略了吗?我不想为我想要使用的每种类型的列表都有不同的aspx,我只是生成一个项目。因此,有15个不同的视图来覆盖我将需要使用的每种类型的列表是浪费。
任何想法或解决方案都会感激不尽。
答案 0 :(得分:2)
如果你的名字总是匹配(自定义对象1然后我想渲染部分自定义对象1.ascx),那么你可以使用类型名称。所以:
void MyMethod(List<T> items)
{
foreach(T item in items)
{
Html.RenderPartial(item.GetType().Name, item);
}
}
答案 1 :(得分:2)
Anthony的第一个答案示例:使列表内容负责通过例如自我渲染。
interface IHtmlRenderable
{
void RenderHtml();
}
void MyMethod(List<T> items) //where T implements IHtmlRenderable
{
foreach(T item in items) ((IHtmlRenderable)item).RenderHtml();
}
但John的回答似乎更清晰,因为您不需要花费精力在每个类上实现此接口 - 或添加属性等。
答案 2 :(得分:1)
听起来我首先需要使用一个对所有CustomObject都通用的接口。您的视图将基于List<IMyCommonInterface>
。
至于包含正确的ascx,我不确定通用系统是如何解决这个问题的。
我能想到两种方法。