【问题标题】:An error occurred when trying to create a controller of type X. Make sure that the controller has a parameterless constructor尝试创建 X 类型的控制器时出错。请确保控制器具有无参数构造函数
【发布时间】:2014-05-23 14:35:48
【问题描述】:

我正在开发一个 asp.net mvc 项目,在该项目中我创建了一个带有一些下拉列表的局部视图。这些填充了ajax,并且应该用作过滤器。 (我猜这与我的问题并不相关,但无论如何很高兴知道)。

尝试调用局部视图时出现问题,说明如下: An error occurred when trying to create a controller of type 'Project.Name.Web.Controllers.PlanFilterController'. Make sure that the controller has a parameterless public constructor.

但是,我的控制器似乎有一个无参数的构造函数;

public class PlanFilterController : BaseController
    {
        public PlanFilterControllerViewModel Model { get; set; }
        public List<DropDownItem> Items { get; set; }

        public List<ProjectContract> AllProjects { get; set; }
        public List<CustomerContract> AllCustomers { get; set; }
        public List<UnitContract> AllUnits { get; set; }

        private ProjectServiceClient ProjectClient { get; set; }
        private CustomerServiceClient CustomerClient { get; set; }

        public PlanFilterController()
        {
            AllProjects = new List<ProjectContract>();
            AllCustomers = new List<CustomerContract>();
            AllUnits = new List<UnitContract>();

            ProjectClient = new ProjectServiceClient();
            CustomerClient = new CustomerServiceClient();

            AllProjects = ProjectClient.GetProjects().ToList();
            AllCustomers = CustomerClient.GetCustomers().ToList();
            AllUnits = UnitClient.GetUnits(true, "", false).ToList();
        }

        // GET: /PlanFilter/
        [ChildActionOnly]
        public ActionResult FilterControl()
        {

            return PartialView();
        }

        // Populate dropdowns
        public JsonResult GetCascadeCustomers()
        {
            Items = new List<DropDownItem>();

            foreach (var customer in AllCustomers)
            {
                Items.Add(new DropDownItem
                {
                    ItemId = customer.Id,
                    ItemName = customer.Name
                });
            }

            return Json(Items, JsonRequestBehavior.AllowGet);
        }

        public JsonResult GetCascadeProjects()
        {
            Items = new List<DropDownItem>();

            foreach (var project in AllProjects)
            {
                Items.Add(new DropDownItem
                {
                    ItemId = project.Id,
                    ItemName = project.Name
                });
            }

            return Json(Items, JsonRequestBehavior.AllowGet);
        }

        public JsonResult GetCascadeUnits()
        {
            Items = new List<DropDownItem>();

            foreach (var unit in AllUnits)
            {
                Items.Add(new DropDownItem
                {
                    ItemId = unit.Id,
                    ItemName = unit.Name
                });
            }

            return Json(Items, JsonRequestBehavior.AllowGet);
        }
    }

我在这里缺少什么?另外,如果有人可以解释为什么会这样,那就太好了:)

【问题讨论】:

  • 构造函数是否可能只是抛出异常?此外,可能不建议为每个控制器实例加载所有项目、所有客户和所有单元。
  • 构造函数可以抛出任何异常(例如最后一行)吗?
  • 事实证明,它实际上可以.. ;) 添加我的服务引用时出现了问题,并且某些代码没有正确生成。这再次导致构造函数崩溃并出现上述异常。
  • 另外,我不确定我是否应该添加上述评论作为对这个问题的回答。建议表示赞赏:)
  • 我认为这应该是由 web.config 中过时的 MVC 程序集版本引起的。

标签: c# asp.net asp.net-mvc


【解决方案1】:

如 cmets 中所述,我在添加服务引用时发生了一些事情,并且某些代码没有自动生成。这再次导致了上述异常。

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2019-04-13
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多