使用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”类型的控制器时出错。请确保控制器具有无参数公共构造函数。
这个错误提示很明显,但是始终无法理解!烦请朋友赐教!
将构造函数的代码移至:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
}
非常感谢!并请指教一下:
在Html.RenderAction 所对应的Controller里,公共构造函数无参数,具体怎么理解?有没有相关教程?
在网上搜了一下,没有搜到,底子薄,没有系统的学习过.net。
@Cox.Hsiang: public TestController(),公共-public, 构造函数-TestController, 无参数-()
@dudu:
public TestController()
{
ViewEngines.Engines.Add(new SiteViewEngine(Config.Get(ProviderManager.Factory.CreateDbProvider()).skinpath));
}
是没有参数的,但为什么提示:请确保控制器具有无参数公共构造函数。
我测试过,在这个构造函数里面,加string="";之类的代码,用html.renderaction是没有问题的。
另外,提示我错误的这种写法,直接页面请求action的时候也不会出现错误。
@Cox.Hsiang: 问题不在构造函数,而在ViewEngines.Engines.Add的代码,Controller的实例还没创建好,还不能进针对Controller操作。ViewEngines.Engines.Add执行时引发了异常,构造函数无法正常执行,以后就出现“请确保控制器具有无参数公共构造函数。”的提示。
@dudu: 哦,原来如此,了解了!非常感谢耐心的解决!谢谢!
@dudu: 现在终于明白了一些,但还是很糊涂。
在这个controller控制器里,页面访问是没有问题的,但只要在页面用Html.RenderAction,这个Action也同样是写在这个controller里面的,就会提示有构造函数的问题。
问题是不是执行的流程的原因?还是怎么回事呢?再次希望能耐心指教,谢谢!
@Cox.Hsiang: 这个问题我没遇到过,不知道具体原因。
@dudu: 非常感谢!仔细分析和看了代码,应该是数据库死锁的问题。在公共构造函数有读写数据库(sqlite)的操作。不知道是不是页面创建的Controller的实例的同时,Html.RenderAction也在创建实例?造成数据库被锁死的错误!