5

呼び出し元のサービス、モデルのタイプに応じてさまざまなオプションをレンダリングできるように、そのページを呼び出しているサービスへのアクセス、または要求 dto またはモデルへのアクセスを取得する必要がある共有 _Layout.cshtml ページがあります。タイプまたはリクエストタイプ。_Layout ページにいる間は、上記のいずれにもアクセスできないようです。私は SS-Razor を初めて使用し、全体像を把握していないだけかもしれませんが、モデルにアクセスするためにこれまでに行ったことは次のとおりです。

_Layout.cshtml で次のように定義したので、ViewBag とセッション情報にアクセスできます。

@using ServiceStack.Razor
@inherits ViewPage<ResponseBase>

プレーンビューページも試してみました

@inherits ViewPage

これにより、_Layout の基本的なページ インフラストラクチャにアクセスできるようになります。ただし、一時的にすべての応答を ResponseBase クラスから継承するように変更し、上記のコードでわかるように、すべてのモデルが少なくとも ResponseBase を持つページを継承しますが、レイアウトのモデルは常に null です。

次に、リクエスト DTO をリクエスト アイテムに挿入するグローバル フィルターをセットアップします。そこで、アプリホストに以下を追加しました。

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
   if(httpReq != null && httpReq.Items != null)
                    httpReq.Items["RequestDto"] = requestDto;
}); 

フィルターでブレークポイントがヒットしたことを確認でき、reqestDto がコレクションに追加されたことを確認できるので、少なくともこの部分が機能していることがわかります。Request.Items の下のコードを使用して _Layout の requestDto にアクセスしようとしたときに、RequestDto が含まれることはありません。

@{
    RequestBase myRequest = null;
    if(base.Request != null)
        if(base.Request.Items.ContainsKey("RequestDto"))
            myRequest = (RequestBase)base.Request.Items["RequestDto"];
}

私の人生では、Razor View Page で実際に何が起こっているかを確認できるようにブレークポイントを設定することができないため、これはすべて試行錯誤です。私はこの段階で RazorRockStars のサンプルを何兆回も試しましたが、そこで何をしようとしているのかを示す例は見当たりません。

この問題に取り組む方法についての指針、例、またはアドバイスはありますか。_Layout でさまざまなオプションをレンダリングするためのまったく異なるアプローチを自由に指摘してください。この段階では、あまり髪の毛が残っておらず、何でも試してみたいと思っています。

4

1 に答える 1

1

ServiceStack の v3.9.33 を試してください。mythz は、この問題に関連する可能性があるかみそりサポートのいくつかの問題を修正しました。

于 2013-01-04T17:41:05.110 に答える