使用Html.RenderAction,在对应controller:public TestController(){}public ActionResult Index(string id){return PartialView("test");}中的公共构造函数内加了这一句ViewEngines.Engines.Add(new SiteViewEngine(Config.Get(ProviderManager.Factory.CreateDbProvider()).skinpath));即:public TestController(){ViewEngines.Engines.Add(new SiteViewEngine(Config.Get(ProviderManager.Factory.CreateDbProvider()).skinpath));}public ActionResult Index(string id){return PartialView("test");}就错误提示:尝试创建“MyDemo.MVC.Controllers.TestController”类型的控制器时出错。请确保控制器具有无参数公共构造函数。这个错误提示很明显,但是始终无法理解!烦请朋友赐教!
2 回答
温温酱
TA贡献1752条经验 获得超4个赞
protected override void Initialize(System.Web.Routing.RequestContext requestContext){}
或者可以用 RedirectToAction(actionName, controllerName);
泛舟湖上清波郎朗
TA贡献1818条经验 获得超3个赞
View中调用: @{Html.RenderAction("CategoryMenu", "Tea");} 对就的ActionControl中: public ActionResult CategoryMenu() { return PartialView(cate); } 一切都似乎那么正常,但是运行的时候却发现浏览器没有反应,IDE假死,最后报错: An unhandled exception of type 'System.StackOverflowException' occurred in Unknown Module. 跟了一下,发现是在action中出现了死循环(infinite loop),并且还跳到了_ViewStart.cshtml 界面。 _ViewStart.cshtml中只有一句: Layout = "~/Views/Shared/_Layout.cshtml"; 而在我们的子界面中又调用了模板界面,是不是这样的原因呢:我们通过RenderAction 来调用我们的action,而我们的action呈现的界面又同时加载了_ViewStart.cshtml中模板界面。而这个时候又调用了RenderAction……这就造成了死循环,大家可以调试着试一下,在对应的Action中下断点,然后循环几次,在模板界面中把调用RenderAction的语句注释掉,就可以看到最后的界面出来了,并且有好几个Action返回的界面在一起。 解决方案就是把子界面中的 Layout =“Layout = "~/Views/Shared/_Layout.cshtml"去掉, 这样也就只加载子界面不重复加载模板界面。 另外在网上也有另外一种方法就是在对应的Action中返回的结果类型是PartialViewResult 而非ActionResult,试了一下,没有成功。
- 2 回答
- 0 关注
- 315 浏览
添加回答
举报
0/150
提交
取消