В моем приложении asp.net mvc 2.0 возникает ошибка: для этого объекта не определен конструктор без параметров - PullRequest
2 голосов
/ 10 апреля 2010

Я новичок в asp.net mvc 2. Я пытаюсь перечислить все данные из одной таблицы (таблица сервера MS SQL). В качестве ORM я использую Entity Framework. Теперь я попытался написать что-то для этого:

Модель:

    private uqsEntities _uqsEntity;
    public permissionRepository(uqsEntities uqsEntity)
    {
        _uqsEntity = uqsEntity;
    }

    public string getUserID()
    {
        return _uqsEntity.userPermissions.FirstOrDefault().ID.ToString();
    }

контроллер:

    private DataManager _dataManager;
    public HomeController(DataManager datamanager)
    {
        _dataManager = datamanager;

    }
    public ActionResult Index()
    {
        ViewData["Message"] = _dataManager.Permission.getUserID();

        return View();
    }

View

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>

когда я запускаю приложение. Мое приложение. терпит неудачу.

Не определен конструктор без параметров для этого объекта. Описание: Ан необработанное исключение произошло во время выполнение текущей сети запрос. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и откуда оно взято в коде.

Сведения об исключении: System.MissingMethodException: нет конструктор без параметров, определенный для этот объект.

Ошибка источника:

Создано необработанное исключение во время исполнения текущего веб-запрос. Информация относительно Происхождение и место исключения можно определить с помощью исключения трассировка стека ниже.

Трассировка стека:

[MissingMethodException: нет конструктор без параметров, определенный для этот объект.]
System.RuntimeTypeHandle.CreateInstance (RuntimeType тип, логическое publicOnly, логическое noCheck, Boolean & canBeCached, RuntimeMethodHandle & ctor, Boolean & bNeedSecurityCheck) + 0
System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean fillCache) + 86
System.RuntimeType.CreateInstanceImpl (Boolean publicOnly, логическое skipVisibilityChecks, Boolean fillCache) + 230
System.Activator.CreateInstance (Тип тип, логическое непубличное значение) + 67
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (RequestContext requestContext, Type controllerType) + 80

[InvalidOperationException: ошибка произошло при попытке создать контроллер типа 'Uqs.Controllers.HomeController. Делать уверен, что контроллер имеет открытый конструктор без параметров.]
System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (RequestContext requestContext, Type controllerType) +190 System.Web.Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, String controllerName) +68 System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase httpContext, IController & controller, IControllerFactory & factory) + 118
System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContextBase httpContext, обратный вызов AsyncCallback, Состояние объекта) + 46
System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContext httpContext, обратный вызов AsyncCallback, Состояние объекта) + 63
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest (HttpContext контекст, AsyncCallback cb, Object дополнительные данные) + 13
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8679186 System.Web.HttpApplication.ExecuteStep (IExecutionStep шаг, логическое и завершено синхронно) + 155

Информация о версии: Microsoft .NET Версия Framework: 2.0.50727.4200; ASP.NET версия: 2.0.50727.4016

пожалуйста, кто-нибудь, помогите мне уловить проблему.

Другие классы: DataManager.cs

public class DataManager
 {
    private uqsEntities _entity;

    public DataManager(string connectionString)
    {
        this._entity = new uqsEntities(connectionString);
    }

    private permissionRepository _permissionsRepository;
    public permissionRepository Permission
    {
        get
        {
            if (_permissionsRepository == null)
                _permissionsRepository = new permissionRepository(_entity);
            return _permissionsRepository;
        }
    }
}

ControllerFactory.cs

public class ControllerFactory : DefaultControllerFactory
    {
        public Type controllerType { get; set; }
        public ControllerFactory()
        {

        }
        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null)
                base.GetControllerInstance(requestContext, controllerType);
            string connectionString = ConfigurationManager.ConnectionStrings["uqsEntities"].ConnectionString;
            return Activator.CreateInstance(controllerType, new DataManager(connectionString)) as IController;
        }
    }

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Я это исправлю, вот так:

protected void Application_Start()
{
            AreaRegistration.RegisterAllAreas();

            RegisterRoutes(RouteTable.Routes);
            //by this code:
            ControllerBuilder.Current.SetControllerFactory(new ControllerFactory());
}
2 голосов
/ 10 апреля 2010

Где находится конструктор без параметров для вашего контроллера? ManagePermissionsController

Фабрика контроллеров по умолчанию требует ее, поэтому, если вы не создадите свою собственную фабрику контроллеров, вам нужно будет добавить ее и изменить способ инициализации вашего DataManager.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...