Заполнение ViewModel - PullRequest
       1

Заполнение ViewModel

0 голосов
/ 06 февраля 2019

Я искал во всем Интернете, чтобы найти ответ на такой простой вопрос, но я не могу найти его.

Предположим, у нас есть Продукт, на котором есть страница редактирования, где мы можемустановить название, цену и категорию.

В соответствии с шаблоном MVC (MVVM) мы имеем:

  • 2 модели ProductModel и ProductCategoryModel
  • ViewModel, которыесодержит продукт и список категорий (для раскрывающегося списка)
  • Просмотр для отображения страницы редактирования

Помимо вышеизложенного, у нас есть ProductService, который обрабатывает операции CRUD

// Model
public class ProductModel
{
    public int ProductId { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
}

// Model
public class ProductCategoryModel
{
        public int CategoryId { get; set; }
        public string Name { get; set; }
}

// ViewModel
public class EditProductViewModel
{
    public ProductModel Product { get; set; }
    public List<ProductCategoryModel> Categories { get; set; }
}

Вопрос в том, кто отвечает за заполнение ViewModel?Я думал, что это можно сделать в конструкторе модели представления, однако люди говорят, что это плохая практика.Заполнение его в контроллере также кажется неправильным.

1 Ответ

0 голосов
/ 06 февраля 2019

Вы отобразите свою EditProductViewModel из своей ProductModel / ProductCategoryModel в контроллере страницы.Затем вы можете вызвать ваше действие для рендеринга html-страницы и передать ваш объект viewModel.

Примерно так:

public class HomeController : Controller
{

    private EditProductViewModel viewModel;

    public HomeController()
    {
        this.viewModel = new EditProductViewModel();
        InitialiseViewModel();
    }

    public ActionResult Index()
    {

        return View("Index", viewModel);
    }

    private void InitialiseViewModel()
    {
        ProductCategoryModel productCategoryModel = new ProductCategoryModel();
        ProductModel productModel = new ProductModel();

        //do your mapping 
        productModel.Name = "Test mapping";
        this.viewModel.Product = productModel;
    }
}

Ваш .cshtml будет выглядеть так

@model WebApplication5.ViewModels.EditProductViewModel

<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p>@Model.Product.Name</p>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
    <p><a href="https://asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...