我正在尝试使用剃刀视图引擎在asp.net mvc中渲染面板(非常像缩略图或web部件),当我必须一次渲染它们时它很容易,因为我有一个视图和所有渲染逻辑都在那里。
但是当我不得不向面板组添加新面板时,我的问题开始了,这是我的看法:
@model IEnumerable<FonteDeNoticia>
<div class="row">
<div class="form-group col-lg-8">
<div class="input-group">
<input id="txtUrl" type="text" class="form-control" placeholder="Url">
<span class="input-group-btn">
<button id="btnAdicionarUrl" class="btn btn-default" type="button">Add</button>
</span>
</div>
</div>
</div>
<div id="fontesDeNoticia" class="row-fluid">
@foreach (var fonte in Model)
{
<div class="col-lg-2 col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><a href="@fonte.Link" target="_new">@fonte.Nome <span class="badge badge-info">42</span></a><span class="iconeClicavel"><a><i class="icon-remove pull-right"></i></a></span><span class="iconeClicavel"><a><i class="icon-gear pull-right"></i></a></span></h3>
</div>
<ul class="list-group">
@foreach (var noticia in fonte.Noticias.Take(3))
{
<li class="list-group-item">
<a class="linkDeNoticia" href="@noticia.Link" target="_new">@noticia.Titulo</a>
<small class="dataDeNoticia">- @noticia.DataDePublicacao</small>
</li>
}
</ul>
</div>
</div>
}
</div>
所以我开始意识到需要改变的东西......我试图使用DisplayForModel,但是渲染面板的方式很重要,而且我无法使它工作。
然后我考虑将foreach渲染为for循环中的局部视图,但我认为它的表现一定是可怕的!
有关于此的任何想法吗?
答案 0 :(得分:0)
渲染循环中的局部视图并不是那么糟糕。因为DisplayForModel
内部使用Html.Partial。我用这种方式实现了一个复杂的插件系统。
<div class="row-fluid">
@if (Model.FooterAreaPlugins != null && Model.FooterAreaPlugins.Count != 0)
{
<div id="@Model.ID-plugInGridFooterArea">
@foreach (var item in @Model.FooterAreaPlugins)
{
@Html.Partial("~/Views/Shared/Module.cshtml", item);
}
</div>
}
</div>
当我的应用变得更大时,至少100 + Html.Partial
(和一些Html.Action
)被调用来为单个页面呈现许多不同的模型,并且没有显着的性能下降。