我有一个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"))
答案 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;
}