0

我正在尝试使用 razor 视图引擎在 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 循环中的局部视图,但我认为它的性能一定很糟糕!

对此有什么想法吗?

4

1 回答 1

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)被调用来为单个页面呈现许多不同的模型并且没有显着的性能下降。

于 2013-11-05T12:52:01.413 回答