5

内部検索エンジンインデックスにページを追加するActionResultには、をにレンダリングする必要があります。文字列にレンダリングするために、このソリューションを決定stringしました。

ExecuteResultビューの処理に使用される呼び出しで問題が発生しました。

コードスニペット:

var oldController = controllerContext.RouteData.Values["controller"];
controllerContext.RouteData.Values["controller"] = 
                  typeof(TController).Name.Replace("Controller", "");

viewResult.ExecuteResult(controllerContext); // this line breaks

次のエラーが表示されます。

"Object reference not set to instance of object" error.

nullではないことを確認viewResultしたので、例外は内部でスローする必要がありますExecuteResult

何が欠けているのでしょうか?

4

4 に答える 4

2

私はそれを考え出した。ExecuteResult の問題は、ControllerContext を適切にモックしていなかったため、期待どおりに機能しませんでした。このSO投稿で説明されているように、コントローラーコンテキストをモックすることで問題を解決できました。

Asp.net-mvc コントローラー コンテキストのモック

この投稿が、将来、似たようなことをしようとしている人に役立つことを願っています。

于 2010-03-27T01:48:57.140 に答える
0

私は自分で試したことはありませんが、MVC を念頭に置いてビューを文字列に出力する方法をPhil Haackが提案しました。

于 2010-03-16T16:32:02.283 に答える
0

MVCContrib には、このシナリオに役立つ BlockRenderer クラスがあります。

于 2010-03-16T19:02:59.937 に答える
0

あなたの質問に対する直接的な答えではありませんが、a) データ自体をインデックスにプッシュする (LINQ to Lucene を使用すると、属性を使用してこれを行うことができます) または b ではなく、ビュー全体を文字列として検索インデックスにレンダリングするのはなぜですか? ) 一連の権利を使用してフロント エンドをクロールする別のプロセスに作業をオフロードしますか?

于 2010-03-26T02:46:49.820 に答える