有帮助吗?

解决方案 2

事实证明,所述 Telerik的MVC扩展是开源和可用在CodePlex上所以我把一个快速浏览源代码。

他们创建从的HtmlHelper实例的ViewContext一个的HtmlTextWriter。当他们写入它,将其写入到页。

代码变为:

// Extend the HtmlHelper
public static PanelWithHeaderControl PanelWithHeader(this HtmlHelper helper)
{
    HtmlTextWriter writer = helper.ViewContext.HttpContext.Request.Browser.CreateHtmlTextWriter(helper.ViewContext.HttpContext.Response.Output);

    return new PanelWithHeaderControl(writer);
}

public class PanelWithHeaderControl
{
    private HtmlTextWriter writer;

    private string headerTitle;

    private Action getContentTemplateHandler;

    public PanelWithHeaderControl(HtmlTextWriter writer)
    {
        this.writer = writer;
    }

    public PanelWithHeaderControl HeaderTitle(string headerTitle)
    {
        this.headerTitle = headerTitle;

        return this;
    }

    public PanelWithHeaderControl Content(Action getContentTemplateHandler)
    {
        this.getContentTemplateHandler = getContentTemplateHandler;

        return this;
    }

    public void Render()
    {
        writer.Write("<div class=\"panel-with-header\"><div class=\"header\">" + headerTitle + "</div><div class=\"content-template\">");

        getContentTemplateHandler();

        writer.Write("</div></div>");
    }
}

* I知道,代码乱七八糟

其他提示

public void Render()
{
    Response.Write(getContentTemplateHandler());
}

您可能想要做像Html.BeginPanel() / Html.EndPanel(),类似形式如何与Html.BeginForm() / Html.EndForm()创建。这种方式可以包装所包含的内容,而不是需要将其作为一个参数传递。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top