MVC3 загрузить общие данные для представлений - PullRequest
0 голосов
/ 27 сентября 2011

Я разрабатываю приложение MVC3 «список фильмов», содержащее несколько «сайтов» в зависимости от имени хоста запроса.

Я пытаюсь использовать строго типизированную ViewModel, как это (примеры упрощены, чтобы понять сутьвопроса):

class ViewModelBase
{
  public int siteId { get; private set; }

  public ViewModelBase(DbContext db)
  {
    siteId = <here I want to make a db-lookup based on the request hostname> <== This is my problem
  }
}

class MoviesIndexViewModel : ViewModelBase
{
  public List<Movie> movies { get; private set; }

  public MoviesIndexViewModel(DbContext db) : base(db)
  {
    movies = db.Movies.where(m => m.SiteId == siteId).ToList();
  }
}

Тогда мой контроллер просто сделает это:

public class MoviesController : Controller
{
  public ActionResult Index()
  {
    var model = new MoviesIndexViewModel(new MySpecialDbContext());
    return View(model);
  }
}

Вопрос в том, как я получу «заголовок узла запроса» в показанной строке кода.выше?Я знаю, как сделать фактический просмотр БД, но я могу просто получить доступ к любым параметрам запроса здесь?Или я должен предоставить что-то через параметры конструктору?

1 Ответ

3 голосов
/ 27 сентября 2011

Я бы не использовал Dbcontext в моих моделях зрения.Прочитайте о Разделение проблем

Вместо этого используйте OnResultExecuting в своем BaseController, чтобы добавить общие данные:

protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
    var baseModel = filterContext.Controller.ViewData.Model as YourCustomModel;
    if (baseModel != null)
    {
        // call a repository or whatever to add information to the model.
    }

    base.OnResultExecuting(filterContext);
}

Обновление

да.Контроллер является связующим звеном между «моделью» (хранилищами, веб-сервисами или любым другим источником данных) и представлением.ViewModel - это просто абстракция для удаления логики из представления.

Вот три основные причины, по которым вам следует использовать модель представления: http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

И альтернативный подход для обработки общего представленияданные: http://blog.gauffin.org/2011/09/getting-information-into-the-layout-without-using-viewbag/

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