ASP.NET MVC是否具有与WPF的DataTemplate功能相同的功能?

时间:2009-06-24 09:34:53

标签: asp.net-mvc wpf user-controls

在我的ASP.NET MVC项目中,我有一个我希望呈现的多态集合 - 比如IEnumerable<ISomething>,其中各个项可能是ISomething的不同实现的混合。

我想要呈现该列表,其中每个具体类型根据其自己的模板(可能是强类型的ViewUserControl)呈现。

在WPF中,我能够指定将自动将具体类型绑定到特定模板的DataTemplates。我可以在ASP.NET MVC中做类似的事情吗?

显然,我可以遍历列表并尝试使用is关键字进行转换,然后使用大量if语句来呈现所需的控件,但我希望有更优雅的东西(像WPF)。

3 个答案:

答案 0 :(得分:1)

我最终自己开发了一个解决方案 - 我在DataTemplating In ASP.NET MVC中对其进行了描述。

答案 1 :(得分:0)

我不确定我是否让你完全,但是,为什么不为你的ISomething界面实现一个方法,例如渲染,通过契约将实现到所有其他具体实体,然后迭代通过多态集合中的每个项目并调用它。

答案 2 :(得分:0)

我有一个类似的问题,从来没有找到一个“简单”的答案。我知道列表中的所有项目都会以相同的方式呈现,因此我为ISomething创建了一个装饰器,使用Umbrella项目中的一些代码(http://umbrella.codeplex.com)将列表转换为IEnumerable,然后提取出来相关部分。有点像以下:

public interface ISomethingDecorator
{
  string Description { get; }
  string[] Actions { get; } 
}

public class BigSomethingDecorator : ISomethingDecorator { /* ... */ }
public class SmallSomethingDecorator : ISomethingDecorator { /* ... */ }

然后,正如我所说,我使用Umbrella项目从ISomething转换为ISomethingDecorator并将IEnumerable返回到View。

不知道它是否会帮助你做你想做的事情 - 尤其是迟到一个月 - 但我想我会告诉你我是如何处理它的。如果你正在显示完全不同的格式,它可能不会起作用,但也许它可以为你提供一个起点。