0

我有三个新闻框的视图:NewsOfTheDay、NewsOfTheWeek、NewsOfTheMonth。在我的模型中,我具有相同的三个属性。现在我的代码如下所示:

@{var news=Model.NewsOfTheDay;}
<div class="newsbox">
    <h2>@(news.Title)</h2>
    <p>@(news.Text)</p>
<div>

<!--other html code-->

@{var news=Model.NewsOfTheWeek;}
<div class="newsbox">
    <h2>@(news.Title)</h2>
    <p>@(news.Text)</p>
<div>

所以,如你所见,我在这里重复 html 代码,有更多重复,为了清楚起见已删除。现在,我可以用部分视图(Html.Action)做一些魔术,但是我必须拆分我的模型。

有没有与此等价的东西:@RenderBox("NewsItem",Model.NewsOfTheWeek)

4

1 回答 1

3

我可能会选择部分视图,但您也可以使用自定义 HtmlHelper 方法。关键是让每个属性实际上是相同的类型(或实现相同的接口),因为模型的类型需要相同。您可以对模型类型使用动态,但这似乎有点过头了,因为它们似乎确实具有相同的属性。

 @Html.Partial("_NewsItem",Model.NewsOfTheWeek)

_NewsItem.cshtml 在哪里

@model NewsItem

<div class="newsbox">
    <h2>@Model.Title</h2>
    <p>@Model.Text</p>
<div>

你的 NewsItem 类是

public class NewsItem
{
    public string Title { get; set; }
    public string Text { get; set; }
}
于 2013-01-13T01:16:55.740 回答