3

インスタンスを手動で作成し、RazorViewそのビューを手動で応答出力にレンダリングしています。

var errorController = new FakeErrorController();
var controllerContext =
    new ControllerContext(httpApplication.Context.Request.RequestContext,
                          errorController);
var view = new RazorView(controllerContext, viewPath, null, false, null);
var viewModel = new ErrorViewModel
                {
                    Exception = currentError
                };
var tempData = new TempDataDictionary();
var viewContext = new ViewContext(controllerContext, view,
                                    new ViewDataDictionary(viewModel), tempData,
                                    httpApplication.Response.Output);
view.Render(viewContext, httpApplication.Response.Output);

正常に動作します。

ViewModelしかし、どのように?をハードコーディングしたかに注目してください。RazorViewに厳密に型指定された定義があるかどうかを確認できるかどうか疑問に思っていましたViewModel

例えば。 @model SomeNamespace.Model.Foo

それに基づいて、新しいタイプを作成します。また、パラメーターのないデフォルトのコンストラクターがあると仮定しましょう。

これは可能ですか?

4

2 に答える 2

1

メソッドの一般化でうまくいくでしょうか?

のような何か...

public void MyMethod<T>(...)
    where T : class, new()
{
   // Your code
   var model = Activator.CreateInstance<T>();
   // More code
}
于 2012-12-10T11:43:21.050 に答える
1

次のコードでビューのタイプを取得できます。

((ViewResult)otherController.Index()).Model.GetType()

ここでのポイントは、ActionResult を ViewResult としてキャストする必要があるということです。ただし、ActionResult から継承する他の型 (HttpResult など) を返すアクションがある場合は、それだけでは十分ではありません。

タイプがあれば、リフレクションを使用してそれを開始できます。

ただし、メソッド呼び出しの後にのみ型を取得できますが、これはあなたの場合ではないと思います。

うまくいけば、それはいくつかの助けになるでしょう。

よろしく。

于 2012-07-11T23:27:49.193 に答える