【问题标题】:convert model to viewmodel [duplicate]将模型转换为视图模型 [重复]
【发布时间】:2011-09-05 19:23:25
【问题描述】:

我有一个表名“产品”和另一个表名“类别”。 产品表有“productID”、“productName”和“CategoryID”。 类别表有“categoryID”和“categoryName”。

我的目标是显示带有类别的产品列表。该列表将包含“产品 ID”、“产品名称”和“类别名称”。

我创建了一个视图模型。代码是

public int prodID{get;set;}
public int prodName{get;set;}
public int catName{get;set;}

在我的控制器中,我有:

var query= from p in dc.Product
                      select new {p.ProductID,p.ProductName,p.Category1.CategoryName };
var prod = new ProductIndexViewModel()
        {
            ProductList=query //this line is problematic !!it says an explicit conversion exists....
        };
        return View(prod);

如何编写控制器代码以使其与视图模型匹配??

【问题讨论】:

    标签: model-view-controller asp.net-mvc-3 viewmodel


    【解决方案1】:

    您可以使用AutoMapper 而不是从数据库模型重写属性。

    var viewModel = new ProductIndexViewModel()
    {  
        ProductList = dc.Product.ToList().Select(product => Mapper.Map<Product, ProductViewModel>(product));
    }
    

    【讨论】:

    • 我在 WCF 中使用 Automapper,但我无法将实体模型与数据合约模型进行映射,我该怎么办??这是我尝试过的:requestDC = dbEntity.RequestDetails.ToList().Select(req =&gt; Mapper.Map&lt;dbEntity.RequestDetails,RequestDC&gt;(req)); //我无法访问 Mapper.Map 下的 dbEntity.RequestDetails
    【解决方案2】:

    也许你会直接使用你的视图模型类:

           var query = from p in dc.Product
                        select new ProductIndexViewModel() { 
                            prodID = p.ProductID, 
                            prodName = p.ProductName, 
                            catName = p.Category1.CategoryName 
                        };
    
            List<ProductIndexViewModel> productForView = query.ToList();
    

    【讨论】:

      【解决方案3】:

      prodNamecatName 应该是字符串吗?

      另外,为什么不这样做:

      var viewModel = dc.Product
          .ToList()
          .Select(x => new ProductIndexViewModel { prodID = x.ProductId, ... }
      
      return View(viewModel);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-10
        相关资源
        最近更新 更多