为了账号安全,请及时绑定邮箱和手机立即绑定

asp.net MVC2控制器的问题

asp.net MVC2控制器的问题

蝴蝶刀刀 2019-08-03 03:03:07
使用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);


查看完整回答
反对 回复 2019-08-05
?
泛舟湖上清波郎朗

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,试了一下,没有成功。




查看完整回答
反对 回复 2019-08-05
  • 2 回答
  • 0 关注
  • 315 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信