MVC3 Динамический Список Представлений - PullRequest
3 голосов
/ 23 марта 2011

В MVC3 я мог положиться на Html.DisplayForModel () для генерации отображения для моих данных.Используя этот метод и различные шаблоны, у меня есть один вид для отображения нескольких моих моделей.Что меня интересует, есть ли способ заставить это работать со списками для моих моделей?

Например, у меня есть модель под названием Networks.Мой взгляд на списки нескольких сетей выглядит следующим образом:

@model PagedList<Network>

<div id="networkList">
@Html.Grid(Model).Columns(column => {
        column.For(x => Html.ActionLink(x.Id.ToString(), "NetworkDetails", new { id = x.Id })).Named("Network ID");
        column.For(x => x.Name);
        column.For(x => x.Enabled);
}).Attributes(Style => "text-align: center")

@Html.AjaxPager(Model, new PagerOptions() { PageIndexParameterName="page", ShowDisabledPagerItems = false, AlwaysShowFirstLastPageNumber=true },
                            new AjaxOptions() { UpdateTargetId = "networkList" })
</div>

Мне интересно, можно ли использовать один шаблон при создании списков для моих моделей.Я мог бы полагаться на атрибуты, чтобы знать, какие свойства я хотел бы сгенерировать в моем списке, например: [ListItem].

Для меня главный вопрос: как передать динамическую модель в метод расширения?Если это поможет, расширение Html.Grid взято из MVCContrib.Кто-нибудь еще делал что-то подобное?Было бы здорово положиться на шаблон, так как он действительно уменьшит объем кода.

1 Ответ

0 голосов
/ 30 октября 2012

Вы можете достичь этого для EditorFor (), используя следующее (это может быть похоже на ваш метод расширения Grid, если он может принимать параметр имени шаблона):

// in the main view
@Html.EditorFor(o => o.InvoiceId, "TemplateName", new { Property = "InvoiceId" })
@Html.EditorFor(o => o.Title, "TemplateName", new { Property = "Title" })

// in the template view
@model object
@{ var property = (string)this.ViewData["Property"]; }

В качестве альтернативы вы можете просто передатьНазовите шаблон и используйте этот код в шаблоне

var prefix = ViewData.TemplateInfo.HtmlFieldPrefix;
if (prefix.EndsWith("InvoiceId")) { ... }
...