首页 新闻 赞助 找找看

asp.net MVC2控制器的问题

0
[已解决问题] 解决于 2013-09-18 16:41

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

这个错误提示很明显,但是始终无法理解!烦请朋友赐教!

沙万的主页 沙万 | 初学一级 | 园豆:195
提问于:2012-02-22 14:39
< >
分享
最佳答案
1

将构造函数的代码移至:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
}
奖励园豆:5
dudu | 高人七级 |园豆:31075 | 2012-02-22 14:52

非常感谢!并请指教一下:

在Html.RenderAction 所对应的Controller里,公共构造函数无参数,具体怎么理解?有没有相关教程?

在网上搜了一下,没有搜到,底子薄,没有系统的学习过.net。

沙万 | 园豆:195 (初学一级) | 2012-02-22 16:42

@Cox.Hsiang:  public TestController(),公共-public, 构造函数-TestController, 无参数-()

dudu | 园豆:31075 (高人七级) | 2012-02-22 16:43

@dudu:        

public TestController()
        {
          ViewEngines.Engines.Add(new SiteViewEngine(Config.Get(ProviderManager.Factory.CreateDbProvider()).skinpath));
        }

是没有参数的,但为什么提示:请确保控制器具有无参数公共构造函数。

我测试过,在这个构造函数里面,加string="";之类的代码,用html.renderaction是没有问题的。

另外,提示我错误的这种写法,直接页面请求action的时候也不会出现错误。

沙万 | 园豆:195 (初学一级) | 2012-02-22 16:53

@Cox.Hsiang: 问题不在构造函数,而在ViewEngines.Engines.Add的代码,Controller的实例还没创建好,还不能进针对Controller操作。ViewEngines.Engines.Add执行时引发了异常,构造函数无法正常执行,以后就出现“请确保控制器具有无参数公共构造函数。”的提示。

dudu | 园豆:31075 (高人七级) | 2012-02-22 16:59

@dudu: 哦,原来如此,了解了!非常感谢耐心的解决!谢谢!

沙万 | 园豆:195 (初学一级) | 2012-02-22 17:03

@dudu: 现在终于明白了一些,但还是很糊涂。

在这个controller控制器里,页面访问是没有问题的,但只要在页面用Html.RenderAction,这个Action也同样是写在这个controller里面的,就会提示有构造函数的问题。

问题是不是执行的流程的原因?还是怎么回事呢?再次希望能耐心指教,谢谢!

沙万 | 园豆:195 (初学一级) | 2012-02-22 17:24

@Cox.Hsiang: 这个问题我没遇到过,不知道具体原因。

dudu | 园豆:31075 (高人七级) | 2012-02-22 20:48

@dudu: 非常感谢!仔细分析和看了代码,应该是数据库死锁的问题。在公共构造函数有读写数据库(sqlite)的操作。不知道是不是页面创建的Controller的实例的同时,Html.RenderAction也在创建实例?造成数据库被锁死的错误!

沙万 | 园豆:195 (初学一级) | 2012-02-23 11:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册