0

NewsOfTheDay、NewsOfTheWeek、NewsOfTheMonthの3つのニュースボックスを含むビューがあります。私のモデルには、これと同じ3つのプロパティがあります。これで、私のコードは次のようになります。

@{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 に答える