DimCustomersIndexViewModel

DimCustomersIndexViewModel

我是使用ViewModels的新手,在这里有一个新列表,并通过循环数据库表向其中添加项目。问题是,反复使用同一条记录,所有返回的记录都是相同的。可能是问题所在,这是完成数据填充和传递ViewModel的好方法吗?还是有更好的方法?现在,它返回大约500条具有相同数据的记录。

public class DimCustomersController : Controller
{
    private AdventureWorks_MBDEV_DW2008Entities db = new AdventureWorks_MBDEV_DW2008Entities();

    public ActionResult CustomersIndexVM()
    {
        List<DimCustomersIndexViewModel> CustomerList = new List<DimCustomersIndexViewModel>();

        DimCustomersIndexViewModel CustomerItem = new DimCustomersIndexViewModel();
        foreach (var m in db.DimCustomers.ToList())// cold do for loop up to count
        {
            CustomerItem.Title = m.Title;
            CustomerItem.FirstName = m.FirstName;
            CustomerItem.MiddleName = m.MiddleName;
            CustomerItem.LastName = m.LastName;
            CustomerItem.BirthDate = m.BirthDate;
            CustomerItem.MaritalStatus = m.MaritalStatus;
            CustomerItem.Suffix = m.Suffix;
            CustomerItem.Gender = m.Gender;
            CustomerItem.EmailAddress = m.EmailAddress;
            CustomerItem.AddressLine1 = m.AddressLine1;
            CustomerItem.AddressLine2 = m.AddressLine2;
            CustomerItem.Phone = m.Phone;
            //other columns go here
            CustomerList.Add(CustomerItem);
        }

        return View("CustomersIndexVM", CustomerList);
    }

最佳答案

这行需要在循环内:

DimCustomersIndexViewModel CustomerItem = new DimCustomersIndexViewModel();

原因是您希望为每个客户提供一个新的视图模型,但是当前您仅创建一个视图模型并更改其属性。当您将其添加到列表中时,您并没有添加副本。您将添加已经添加的相同视图模型。

如果DimCustomersIndexViewModel是一个结构,则此代码将起作用,因为结构只是一袋没有固有标识的值,它们被复制而不是引用。 (Technical comparison.)但这是一个具有唯一标识的类(应该如此),因此您要一遍又一遍地向列表中添加对单个视图模型的引用。 Customerlist[0]CustomerList[1]以及所有其他项目都指向同一个DimCustomersIndexViewModel对象实例,该对象实例的属性随后被覆盖,并等于最后一个客户。

通过在循环内移动此行,您将为每个客户创建一个单独的DimCustomersIndexViewModel,每个客户都有自己的属性集,并且CustomerList包含对许多不同的DimCustomersIndexViewModel对象实例的引用。


对这一概念有扎实的经验之后,将来的步骤可能是使用AutoMapper,这样您就不必在此处维护代码中所有属性的列表。

关于c# - ViewModel对所有500多个记录返回相同的值到 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40199477/

10-10 19:09