Проблема конструктора контроллера приложений ASP.NET MVC - PullRequest
3 голосов
/ 13 января 2009

Я создал абстрактный класс контроллера приложения, от которого происходят мои контроллеры (как описано в следующей статье )

Ниже приведен пример того, как выглядит мой код

public abstract class ApplicationController : Controller
{
    private ProjectDataContext datacontext = new ProjectDataContext();

    protected ProjectDataContext DataContext
    {
        get { return datacontext; }
    }

    public ApplicationController()
    {
        ViewData["OpenTasks"] = DataContext.Tasks.Where(t => t.UserId == this.UserId).Count();
    }
}

Это приводит к следующей ошибке, которую я определил, из-за выражения "Где" лямда:

Если у контроллера нет фабрики контроллеров, убедитесь, что у него есть открытый конструктор без параметров.

эта ошибка возникает в зависимости от того, как я пишу запрос LINQ, и единственный способ скомпилировать приложение - удалить предложение «Где» следующим образом.

ViewData["OpenTasks"] = DataContext.Tasks.Count();

любые идеи, в чем заключается проблема или как ее решить, поскольку мне нужно выполнить запрос к пользователю и не вернуть все записи.

заранее спасибо

Ответы [ 2 ]

10 голосов
/ 13 января 2009

Попробуйте это вместо использования конструктора: -

public abstract class ApplicationController : Controller
{
    private ProjectDataContext datacontext = new ProjectDataContext();

    protected ProjectDataContext DataContext
    {
        get { return datacontext; }
    }

    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        base.Initialize(RequestContext);
        ViewData["OpenTasks"] = DataContext.Tasks.Where(t => t.UserId == this.UserId).Count();
    }
}

Вполне вероятно, что текущий идентификатор пользователя зависит от RequestContext

1 голос
/ 13 января 2009

Возможно, вызов вызывает сбой в конструкторе, поскольку идентификатор пользователя (this.UserId) еще не был инициализирован.

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