HtmlHelper, который связывает свойства модели.Свободный интерфейс - PullRequest
0 голосов
/ 29 июня 2011

Я хотел бы создать метод расширения HtmlHelper, который позволит вам установить экземпляр модели и затем привязать свойства этой модели для визуализации некоторого html.

Это будет следовать похожему шаблону вблизи Telerik Grid.

В следующем примере мы видим, что мы установили Model в качестве DataContext Grid.Затем объявите несколько столбцов.В каждом столбце они связывают свойство в отношении модели, которое является IEnumerable.Поэтому, когда сетка отображает строки, соответствующее свойство связывается с экземпляром модели для этой строки.

@(Html.Telerik().Grid(Model)
        .Name("Grid")
        .Columns(columns =>
        {
            columns.Bound(o => o.OrderID).Width(100);
            columns.Bound(o => o.ContactName).Width(200);
            columns.Bound(o => o.ShipAddress);
            columns.Bound(o => o.OrderDate).Format("{0:MM/dd/yyyy}").Width(120);
        })
        .Scrollable(scrolling => scrolling.Enabled((bool)ViewData["scrolling"]))
        .Sortable(sorting => sorting.Enabled((bool)ViewData["sorting"]))
)

В принципе, я хотел бы получить идеи о том, как реализовать метод Bound.Для моего сценария Модель также будет иметь значение IEnumerable.Допустим, у меня есть модель, которая List<MyObj>

Ради аргумента, MyObj выглядит примерно так:

public class MyObj
{
    public bool IsRegistered { get; set;}
    public string Name { get; set; }
}

Я хотел бы оказаться в представлении, вызывающемhtmlhelper, который отобразил бы мой список и выглядел бы примерно так:

@(Html.MyHelpers().MyList(Model)
                  .ControlOne.Bound(o => o.IsRegistered)
                  .ControlTwo.Bound(o => o.Name)
)

Я еще не очень много пробовал и, честно говоря, я не уверен, как это реализовать.Так что я буду публиковать обновления, так как это будет в стадии разработки.Но, если есть какие-либо идеи или предложения, я был бы признателен.Я знаю, что могу использовать сетку, но этот помощник будет легче, потому что мне не нужно много функциональности и я не хочу перетаскивать сетку Telerik для этой цели.

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 июня 2011

http://publicvoidlife.blogspot.com/2011/02/htmlhelper-extensions.html этот пост может помочь вам написать строго типизированные расширения HtmlHelper.

Актуальный вопрос:

Можно ли создать собственный ASP.NET MVCHTML Helper со строгой типизацией?

И вы можете проверить некоторые проекты с открытым исходным кодом, такие как mvccontrib и djme

0 голосов
/ 29 июня 2011

Вы смотрели на исходный код Html.DisplayForModel() (поскольку ASP.NET MVC с открытым исходным кодом)?Может быть, это даст вам некоторые подсказки.

Исходный код для ASP.NET MVC 3 RTM находится здесь: http://aspnet.codeplex.com/releases/view/58781

Биты, на которые вам нужно обратить внимание: DisplayExtensions.cs и TemplateHelpers.csв mvc3-rtm-sources\mvc3\src\SystemWebMvc\Mvc\Html

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

Также есть EditorExtensions.cs, который содержит Html.EditorForModel(), который дает вам редактируемую версию.

Важной особенностью ASP.NET MVC является то, что вы можете поменять любую его часть инаписать свой, так что вы можете достичь почти все.

...