2011-06-28 179 views
0

我想創建一個HtmlHelper擴展方法,它允許你設置模型實例,然後綁定這個模型的屬性來渲染一些html。HtmlHelper綁定模型屬性。 Fluent Interface

這將會跟在Telerik Grid附近的類似模式。

在以下示例中,我們看到我們將Model設置爲網格的DataContext。 然後聲明一些列。 Foreach專欄中,他們將模型綁定到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網格。

謝謝!

回答

0

一些開源項目有你有一個看看源代碼Html.DisplayForModel()(因爲ASP.NET MVC是開源的)?也許它會給你一些線索。對於ASP.NET MVC 3 RTM

源代碼是在這裏:http://aspnet.codeplex.com/releases/view/58781

你需要看看是DisplayExtensions.csTemplateHelpers.csmvc3-rtm-sources\mvc3\src\SystemWebMvc\Mvc\Html

點的位是,你已經可以用Html.DisplayForModel()渲染控制你的模型的每個屬性,你可以通過查看源代碼來了解它是如何完成的,所以你可以輕鬆地調整它。

還有EditorExtensions.cs其中包含Html.EditorForModel()它給你編輯版本。

關於ASP.NET MVC的重要之處在於,您可以將它的任何部分換掉並編寫自己的代碼,這樣您就可以實現任何功能。