我試圖用Asp.Net MVC創建一個模板化的控件。通過模板控制,我的意思是接受標記作爲輸入,像這樣控制:如何使用Asp.Net MVC創建模板化控件?
<% Html.PanelWithHeader()
.HeaderTitle("My Header")
.Content(() =>
{ %>
<!-- ul used for no particular reason -->
<ul>
<li>A sample</li>
<li>A second item</li>
</ul>
<% }).Render(); %>
注:是的,這是非常相似的how Telerik creates its MVC controls,我喜歡的語法。
這裏是我的PanelWithHeader代碼:
// Extend the HtmlHelper
public static PanelWithHeaderControl PanelWithHeader(this HtmlHelper helper)
{
return new PanelWithHeaderControl();
}
public class PanelWithHeaderControl
{
private string headerTitle;
private Action getContentTemplateHandler;
public PanelWithHeaderControl HeaderTitle(string headerTitle)
{
this.headerTitle = headerTitle;
return this;
}
public PanelWithHeaderControl Content(Action getContentTemplateHandler)
{
this.getContentTemplateHandler = getContentTemplateHandler;
return this;
}
public void Render()
{
// display headerTitle as <div class="header">headerTitle</div>
getContentTemplateHandler();
}
}
這顯示ul
,但我不知道如何顯示我的Render方法中的自定義代碼。
我試過使用HtmlHelper沒有成功。我也嘗試覆蓋ToString方法,以便能夠使用<%=Html.PanelWithHeader()...
語法,但我一直有語法錯誤。
我怎樣才能做到這一點?
這會工作,但它的醜陋,要求用戶記住調用兩者。 – mbillard