1

始める前に、私はここでこの同様の質問を見つけましたが、それはまったく同じ問題ではないと思います。

カスタムを作成し、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が単なるプロパティであることを示しているため、設定しても値が変更されない理由がわかりません。

4

1 に答える 1

1

何かが足りないかもしれませんが、試してみましたか:

@{ Layout = SetLayout(); }

于 2013-02-19T18:21:52.057 に答える