2011-11-14 46 views
3

我在這個問題上苦苦掙扎了好一陣子。我需要創建一個自定義的mvc3 html助手,以實現簡單的過濾和工具欄管理。如何在mvc3中創建自定義過濾器工具欄html幫助

所有的幫手應該看起來像這樣下面或類似的東西。我想要做的是有一個幫手,我可以給工具欄按鈕和過濾器字段,它會爲我生成一個工具欄和過濾器窗體。

我只是無法弄清楚,因爲我在asp.net mvc的

@Html.Toolbar(x => { 
    x.AddFilterButton(); 
    x.AddButton("Naujas"); 
    x.AddDropDownList(); 
    }, 
    @<text> 
    @Html.EditorFor(Model.ListFilter.Name) 
    Filter 
    ResetFilter 
    </text>, 
    filterVisible: false) 

很新我怎麼能做到這一點?任何幫助都會被高估。的確如此。

+1

我想幫你。但是在你的問題中混合了很多不同的東西,所以我需要一個小時來回答;)對於你的lambda(x => {x.Add(...))部分,你應該熟悉表達式樹。其餘的並不難掌握。我建議你下載mvc3,mvcContrib或telerik的源碼。他們在他們的網格和其他控制中有這個。 – dknaack

回答

2

事情是這樣的:

public static class ToolbarExtensions { 
    public static Toolbar Toolbar<T>(this HtmlHelper<T> html) { 
     return new Toolbar(); 
    } 
} 

public class Toolbar : IHtmlString { 
    public string ToHtmlString() { /* build your HTML off the state here */ } 

    public Toolbar AddButton(string label) { 
     /* build up state here */ 

     return this; 
    } 
} 

這個語法是有點不同的,而不是一個拉姆達,應該是這樣的:

@Html.Toolbar().AddButton("Button 1").AddButton("Button 2") 

但是你可以很容易地改變它使用在lambda中的鏈接對象而不是在方法調用Toolbar

IHtmlString接口告訴ViewEngine在遇到它時將其輸出爲原始HTML。鏈只是通過在修改對象狀態後在方法中返回當前實例來實現的。

相關問題