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”类型的控制器时出错。请确保控制器具有无参数公共构造函数。

这个错误提示很明显,但是始终无法理解!烦请朋友赐教!
展开
 我来答
zheng4050
2012-02-22 · TA获得超过530个赞
知道小有建树答主
回答量:227
采纳率:0%
帮助的人:162万
展开全部
protected override void Initialize(System.Web.Routing.RequestContext requestContext){}
或者可以用 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,试了一下,没有成功。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式