2012-02-21 5 views
3

Хорошая практика заключается в том, чтобы заполнить модели/переменные viewmodel в конструкторе viewmodel?MVC конструкторы viewmodel

Например:

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

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

ответ

6

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

Это зависит.

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

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, ...