2015-11-04 145 views
1

我有一個已經運行了我的牆壁過去幾天的一個錯誤。我有一些代碼需要HttpContext和ViewResult並將視圖呈現爲字符串。此代碼似乎工作得很好,直到我引入包含@ Html.RenderAction調用的視圖。當調用的RenderAction添加到視圖,我得到一個錯誤消息,指出綁在動作控制器需要一個無參數的構造函數。然而,添加這樣的構造函數並不能改善這種情況。執行渲染代碼如下:渲染一個ASP.Net MVC局部視圖的字符串時,局部視圖包含渲染動作

public static string Render(HttpContextBase httpContext, ViewResultBase partialViewResult) 
{ 
    var routeData = new RouteData(); 
    routeData.Values.Add("controller", "mock"); 

    var context = new ControllerContext(httpContext, routeData, new EmptyController()); 

    var view = partialViewResult.View; 
    if (view == null) 
    { 
     result = partialViewResult.ViewEngineCollection.FindPartialView(context, partialViewResult.ViewName); 

     view = result.View; 
    } 

    using (var sw = new StringWriter()) 
    { 
     var viewContext = new ViewContext(context, view, partialViewResult.ViewData, 
             partialViewResult.TempData, sw); 
     view.Render(viewContext, sw); 
     if (result != null) 
      result.ViewEngine.ReleaseView(context, view); 

     return sw.ToString(); 
    } 
} 

在我想要呈現的觀點,我曾嘗試:

@{ Html.RenderAction(FormController.Directive(Model.FormModel)); } 

@Html.Action(FormController.Directive(Model.FormModel)) 

兩個結果在相同的錯誤消息。

An error occurred when trying to create a controller of type 'FormController'. Make sure that the controller has a parameterless public constructor. 

刪除動作調用完全消除了錯誤消息。

控制器的操作是這樣的:

public virtual ActionResult Directive(FormModel model) 
{ 
    model.MyProperty = "test"; 

    return View("FormView", model); 
} 

任何意見將不勝感激。

UPDATE

我跟蹤這個問題有某種領帶統一。渲染代碼在我添加一個空構造函數並刪除所有其他構造函數時起作用。其他構造函數包含對通過Unity路由的接口的引用。我需要更多地瞭解Unity。那裏可能有一些功能正在替換或銷燬我的控制器的默認構造函數。

回答

0

Html.Action聲明看起來應該像下面這樣:

@Html.Action("Directive", "Form", new { model = Model.FormModel }) 
+0

感謝您的提交,但這並沒有解決問題。無參數構造函數錯誤依然存在。 – CodeMunkey

+0

你的'FormController'是否有一個類似於'public FormController(){...}'的構造函數。也許你可以在'FormController'類添加到你的問題,因爲它看起來是這樣的問題,而不是它的其餘部分。 –

+0

我試圖用一個公共的空構造使用控制器,或者甚至根本沒有構造函數和誤差保持不變。請記住,這裏的問題以某種方式與嘗試將視圖呈現爲字符串相關聯。視圖和控制器在使用IIS正常呈現時工作正常。 – CodeMunkey

0

/添加默認的構造函數到您的 「FormModel」 級,它會解決這個問題/

public void FormModel() 
    { 

    }