我一直在网上搜索以找到此类简单问题的答案,但似乎找不到。
假设我们有一个带有编辑页面的产品,我们可以在其中设置名称,价格和类别。
遵循MVC(MVVM)模式,我们有:
除了上述内容之外,我们还具有处理CRUD操作的ProductService
// 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?我虽然可以在视图模型的构造函数中完成此操作,但是人们说这是不好的做法。在控制器中填充它似乎也不正确。
答案 0 :(得分:0)
您将在页面控制器中从ProductModel / ProductCategoryModel映射EditProductViewModel。 然后,您可以调用操作以呈现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 »</a></p>
</div>