qui*_*lin 1 asp.net polymorphism view
为了给你一个你应该熟悉的例子,想象你正在Asp.Net MVC中构建一个Facebook墙页面.在墙上,有不同类型的帖子(即状态更新,照片,视频,链接等等.它们都显示在墙上,它们都呈现不同,取决于它们是什么类型的帖子.我正在构建类似于在我看来,最优雅的方法是使用多态.我通过Post类型进行操作并调用每个子类型实现的渲染方法.我在Web窗体的代码隐藏中做了类似的事情,但是我无法弄清楚如何在没有混合问题的情况下在MVC中做到这一点,缺少一个if else块的巨大列表.
@foreach(Post post in Model.Posts)
{
if(post is A)
{
<div>Different Content</div>
}
else if(post is B)
{
<div>Different Content</div>
}
else if(post is C)
{
<div>Different Content</div>
}
}
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
@foreach(Post post in Model.Posts)
{
post.render();
}
Run Code Online (Sandbox Code Playgroud)
如何像第二部分那样获得更多可维护的东西?
为父对象提供属性"PartialViewPath",并在每个子类中,让PartialViewPath属性返回一个字符串,该字符串表示该类型的帖子的视图路径.然后,在您的主视图中,它就像这样简单:
@foreach (var post in Model.Posts)
{
Html.RenderPartial(post.PartialViewPath)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |