MVC конструкторы модели представления - PullRequest
3 голосов
/ 21 февраля 2012

Является ли хорошей практикой заполнение моделей / переменных модели представления в конструкторе модели представления?

Например:

public class ProgramViewModel
{
    public IEnumerable<Programme> ProgramList { get; set; }
    public string QuerystringAgeID { get; set; }

    public ProgramViewModel()
    {
        QuerystringAgeID = HttpContext.Current.Request.QueryString["QuerystringAgeID"];
    }
}

1 Ответ

6 голосов
/ 21 февраля 2012

Это хорошая практика для заполнения моделей / переменных модели представления в конструктор модели представления?

Это зависит.

Но на примере, который вы показали, ответ будет нет . У вас есть связующее для моделей, которое должно это делать:

public class ProgramViewModel
{
    public IEnumerable<Programme> ProgramList { get; set; }
    public string QuerystringAgeID { get; set; }
}

и затем:

public ActionResult Foo(ProgramViewModel model)
{
    // model.QuerystringAgeID will be automatically populated 
    // with the value of the QuerystringAgeID 
    // thanks to the default model binder
    ...
}

В дополнение к этому вы должны избегать использования HttpContext.Current в приложении ASP.NET MVC. Делает ваш код привязанным к контексту ASP.NET, что делает невозможным повторное использование и модульное тестирование изолированно. ASP.NET MVC предоставляет вам абстракции для этого: HttpContextBase, ...

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