代わりのWebPageBase
私はその後、かみそりページ@using static Stackoverflow.SessionExtensions
でクラスを参照し、そのようにそれを呼び出すMicrosoft.AspNet.Mvc.Razor
に
namespace Stackoverflow
{
public static class SectionExtensions
{
public static IHtmlContent RenderSection(this RazorPage page, [RazorSection] string name, Func<dynamic, IHtmlContent> defaultContents)
{
return page.IsSectionDefined(name) ? page.RenderSection(name) : defaultContents(null);
}
}
}
をRazorPage
を使用:代替の方法は、になり
@this.RenderSection("extra", @<span>This is the default!</span>))
ビューでこれを行うだけです(私はこの方法が好きです、もっと簡単に見えるでしょう):
@if (IsSectionDefined("extra"))
{
@RenderSection("extra", required: false)
}
else
{
<span>This is the default!</span>
}
これが役立ちます。
アップデート1(コメント)
は、名前空間
@using Stackoverflow
を参照することにより、あなたはstatic
キーワードを含める必要はありませんが、それを呼び出すときに、あなたが実際に参照する必要があります関数に 'this'を渡します。
@SectionExtensions.RenderSection(this, "extra", @<span>This is the default!</span>)
アップデート2
あなたはセクション内のテンプレート代表者Func <dynamic, object> e = @<span>@item</span>;
を呼び出すことはできませんかみそりのバグがあります。 https://github.com/aspnet/Razor/issues/672
現在の回避策を参照してください。
public static class SectionExtensions
{
public static IHtmlContent RenderSection(this RazorPage page, [RazorSection] string name, IHtmlContent defaultContents)
{
return page.IsSectionDefined(name) ? page.RenderSection(name) : defaultContents;
}
}
、その後、かみそりのページ:応答のための
section test {
@this.RenderSection("extra", new HtmlString("<span>this is the default!</span>"));
}
感謝を。私は単にビューの外にあるステートメントを保持したいので、代わりの方法が好きではありません。あなたが言及したことを試しましたが、すべてが名前空間を除いて動作するようです。 this.RenderSectionの代わりにSectionExtensions.RenderSectionを使用する必要があるようです。 usingステートメントは何もしないようですか? –
私の前回の編集が何らかの理由で私の答えを更新しました。静的クラスを直接参照するには、静的キーワードegを使用します。 '@using static Stackoverflow.SessionExtensions'、ただし、名前空間を参照するだけの場合は、静的などを追加する必要はありません。 '@using Stackoverflow'。名前空間全体をビューに含めるかどうかは、すべてに依存します。その場合、 '@ this.RenderSection'の代わりに '@ SessionExtension.RenderSection'を呼び出して、RenderSection関数(this、 "test"、@ default)に 'this'を渡す必要があります。それが役に立ったら教えてください。 –
私はこれが働いていると思ったが、問題にぶつかった。ネストされたレイアウトがあるとします。MasterLayoutに標準@RenderSection( "test"、false)があります。次に、MasterLayoutを継承するSubMasterLayoutがあります。私は @sectionテストしようとすると、{SectionExtensions.RenderSection @ ( @この、「余分な」、これがデフォルトです!) } 私は次の例外を取得 :「__razor_template_writer」:パラメータまたはローカル変数はできませんメソッド型パラメータと同じ名前を持つ これはMVC5で完全に機能しましたか? –