2012-07-11 87 views
3

我手動創建一個RazorView實例並手動將該視圖渲染到我的響應輸出中。是否有可能以編程方式確定ASP.NET MVC的Razor視圖模型?

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

然後創建一個新的類型,基於此。讓我們也假設有一個無參數的默認構造函數。

這可能嗎?

回答

1

你可以用下面的代碼視圖類型:

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

的這裏的一點是,我們必須投下的ActionResult作爲的ViewResult。但是,如果您的操作返回從ActionResult繼承的其他類型(如HttpResult等),那將是不夠的。

有了這個類型,你可以使用反射來安裝它。

但是,我們只能在方法調用後才能獲得類型,我相信這不是您的情況。

希望它會有一些幫助。

問候。

1

該方法的泛化是否有用?

的東西,如...

public void MyMethod<T>(...) 
    where T : class, new() 
{ 
    // Your code 
    var model = Activator.CreateInstance<T>(); 
    // More code 
} 
相關問題