在另一个Html Helper方法中将Html Helper方法作为参数传递

时间:2015-12-04 00:25:55

标签: c# asp.net-mvc

我有一个Html Helper方法,用于检查是否定义了Section,如果没有,则应该写出部分文件。

对于这个方法,我可以传递一个长字符串(部分相当大)或者我可以传递实际方法@Html.RenderPartial(..),这在我看来会更有效(或者它可以忽略不计?)。< / p>

虽然我不知道如何将@Html.RenderPartial(..)方法作为参数传递给以下函数?我应该创建一个代表吗?

    public static HelperResult RenderSectionEx(this WebPageBase webPage, 
                                                string name, ??? defaultContents)
    {
        if (webPage.IsSectionDefined(name))
            return webPage.RenderSection(name);
        else return defaultContents(null);
    }

用法:

@this.RenderSectionEx("MetaTags", Html.Partial("~/Views/Shared/Partials/MetaTags.cshtml"))

有什么好处是能够在这个方法中传递两个字符串或函数,所以我可以传递小字符串,例如;

@this.RenderSectionEx("Title", @<h1>blah</h1>)

@this.RenderSectionEx("MetaTags", Html.Partial("~/Views/Shared/Partials/MetaTags.cshtml"))

1 个答案:

答案 0 :(得分:1)

不确定这是否有效(暂时没有地方可以测试)但你可以创建一个委托,这意味着除非绝对必要,否则不会调用partial:

public static IHtmlString RenderSectionEx(this WebPageBase webPage, 
                                          string name, 
                                          Func<IHtmlString> defaultContentMethod)
{
    if (webPage.IsSectionDefined(name))
        return webPage.RenderSection(name);

    return defaultContentMethod();
}

然后在你的观点中调用它:

@RenderSectionEx("blah", () => Html.Partial("~/Views/Shared/Partials/MetaTags.cshtml"))

并将其重载为字符串而不是委托:

public static IHtmlString RenderSectionEx(this WebPageBase webPage, 
                                          string name, 
                                          string defaultContent)
{
    if (webPage.IsSectionDefined(name))
        return webPage.RenderSection(name);

    return defaultContent;
}