【问题标题】:Avoiding code duplication in ASP MVC4避免 ASP MVC4 中的代码重复
【发布时间】:2012-12-27 07:17:18
【问题描述】:

我有一个包含三个新闻框的视图: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)

【问题讨论】:

  • 不是 MVC 开发人员,但你为什么不把局部视图渲染 3 次,然后将 NewsOfTheWeek 的任何类型作为模型类型?
  • 我可以,正如我所说的,但是我需要对每种新闻类型进行单独的查询,而且我必须(更喜欢)一次调用。

标签: asp.net-mvc-4 code-duplication


【解决方案1】:

我可能会使用局部视图,但您也可以使用自定义 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; }
}

【讨论】:

    猜你喜欢
    • 2014-03-07
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多