asp.net MVC2控制器的问题
使用Html.RenderAction,在对应controller:publicTestController(){}publicActionResultIndex(str...
使用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”类型的控制器时出错。请确保控制器具有无参数公共构造函数。
这个错误提示很明显,但是始终无法理解!烦请朋友赐教! 展开
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”类型的控制器时出错。请确保控制器具有无参数公共构造函数。
这个错误提示很明显,但是始终无法理解!烦请朋友赐教! 展开
1个回答
展开全部
protected override void Initialize(System.Web.Routing.RequestContext requestContext){}
或者可以用 RedirectToAction(actionName, controllerName);
或者可以用 RedirectToAction(actionName, controllerName);
追问
Html.RenderAction所要访问的控制器,公共构造函数应该如何写呢?或者说这个公共构造函数有什么要求??
因为同样的controller,页面请求,而不是Html.RenderAction的时,是没有问题的。
追答
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,试了一下,没有成功。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询