始める前に、私はここでこの同様の質問を見つけましたが、それはまったく同じ問題ではないと思います。
カスタムを作成し、WebViewPage<T>
それをweb.configのビューのベースページとして設定しました。これは正常に機能しています。次のようなメソッドをクラスに追加しました-
public void SetLayout()
{
if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["abc"]))
{
Layout = null;
}
}
実際のユースケースではもう少し多くのことがありますが、これが基本的な方法です。ビューから呼び出され、クエリ文字列パラメータが渡された場合にレイアウトをオーバーライドすることになっています。
@{ SetLayout(); }
私が遭遇している問題は、レイアウトがnullに設定されないことです。Visual Studioでコードをステップ実行すると、レイアウトが"~/Views/Shared/_Layout.cshtml"
(から_ViewStart.cshtml
)に設定されていることがわかります。次に、上記のコードが実行され、nullに設定されます。Layoutプロパティを調べると(その行が実行された直後)、まだ完全な文字列に設定されています。イミディエイトウィンドウでは、nullにオーバーライドできますが、これは機能しますが、コードを介しても効果はありません。
base.Layoutなどを使用して、クラスに追加のLayoutオーバーライドを追加しようとしました。基本クラスは、Layoutが単なるプロパティであることを示しているため、設定しても値が変更されない理由がわかりません。