8

私は、MVC Preview 5 に対する新しい ViewEngine の変更に関する Brad Wilson の投稿 ( http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html ) を読んでいて、それができれば素晴らしいと思いました。テストで使用するためにビューを文字列にレンダリングします。記事から、これを達成することは可能かもしれないが、方法が分からないという印象を受けます。

これにより、予期される値/テキストの文字列をチェックするだけでビューが正しくレンダリングされたことを確認できるため、WatIn テスト (遅くて信頼性が低い) の一部を廃止できると思います。

誰かがこのようなものを実装しましたか?

4

3 に答える 3

5

トリッキーです。あなたがしなければならないことは、あなたが実装するカスタムストリームクラスにResponse.Filterプロパティを設定することです。MVC Contribプロジェクトには、実際にこれを行う例があります。私はそこをいじくり回しました。

于 2008-09-22T19:25:26.010 に答える
1

ここに必要なものがあると思います。このRenderPartialToString関数はコントローラーを文字列として返します。ここから取得します。

public static string RenderPartialToString(string controlName, object viewData)
{
     ViewDataDictionary vd = new ViewDataDictionary(viewData);
     ViewPage vp = new ViewPage { ViewData = vd };
     Control control = vp.LoadControl(controlName);

     vp.Controls.Add(control);

     StringBuilder sb = new StringBuilder();
     using (StringWriter sw = new StringWriter(sb))
     {
         using (HtmlTextWriter tw = new HtmlTextWriter(sw))
         {
             vp.RenderControl(tw);
         }
     }

     return sb.ToString();
}
于 2015-06-24T03:02:55.490 に答える
0

テストに加えて、HTML から PDF へのコンバーターなどのコンポーネントにも役立ちます。これらのコンポーネントは通常、2 つの変換方法を使用します。

  • URL を変換メソッドに渡す
  • HTML コンテンツを渡す (オプションで、仮想パスを解決するために baseUrl を指定できます)

コントローラー内で Authorize フィルターを使用しているため、URL にリダイレクトすると、レンダリングされた HTML がログイン ページになります (カスタム認証を使用します)。

コンテキストを保持するために Server.Execute(Url) を使用すると、メソッドは失敗します (HttpUnhandledException: /Template/Pdf/1 の子要求の実行中にエラーが発生しました)。

そのため、レンダリングされた ViewResult の HTML を取得しようとしましたが、成功しませんでした。

于 2008-11-15T04:10:45.793 に答える