视图中的Asp.Net MVC多态性

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)

如何像第二部分那样获得更多可维护的东西?

Chr*_*ris 5

为父对象提供属性"PartialViewPath",并在每个子类中,让PartialViewPath属性返回一个字符串,该字符串表示该类型的帖子的视图路径.然后,在您的主视图中,它就像这样简单:

@foreach (var post in Model.Posts)
{
    Html.RenderPartial(post.PartialViewPath)
}
Run Code Online (Sandbox Code Playgroud)