C# 编辑视图模型

C# 编辑视图模型,c#,asp.net-mvc,entity-framework,code-first,C#,Asp.net Mvc,Entity Framework,Code First,我有我的ViewModel,我有我的控制器可以从ViewModel正确显示,但是我不确定如何使ViewModel可编辑,以便将编辑后的数据发送回模型。我只想编辑OrderArchiveViewModel,不想编辑详细信息 视图模型 public class OrderArchiveViewModel { public int OrderId { get; set; } public System.DateTime OrderDate { get; set

我有我的ViewModel,我有我的控制器可以从ViewModel正确显示,但是我不确定如何使ViewModel可编辑,以便将编辑后的数据发送回模型。我只想编辑OrderArchiveViewModel,不想编辑详细信息

视图模型

public class OrderArchiveViewModel

    {
        public int OrderId { get; set; }
        public System.DateTime OrderDate { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string PostalCode { get; set; }
        public decimal Total { get; set; }
        public bool HasBeenShipped { get; set; }
        public List<OrderDetailArchive> Details { get; set; }
    }

    public class OrderDetailArchive
    {
        public string Title { get; set; }
        public string Colour { get; set; }
        public int Quantity { get; set; }
        public decimal UnitPrice { get; set; }
    }
控制器

[Authorize(Roles = "Administrator")]
    public ActionResult Index()
    {

        List<T_shirt_Company_v3.ViewModels.OrderArchiveViewModel> list = (from o in new TshirtStoreDB().Orders
                            .OrderBy(o => o.OrderDate)
                            .Select(o => new OrderArchiveViewModel()
                            {
                                OrderId = o.OrderId,
                                Address = o.Address,
                                FirstName = o.FirstName,
                                LastName = o.LastName,
                                City = o.City,
                                OrderDate = o.OrderDate,
                                PostalCode = o.PostalCode,
                                Total = o.Total,
                                HasBeenShipped = o.HasBeenShipped,
                                Details = (from d in o.OrderDetails
                                           select new OrderDetailArchive
                                           {
                                               Colour = d.Product.Colour,
                                               Quantity = d.Quantity,
                                               Title = d.Product.Title,
                                               UnitPrice = d.UnitPrice
                                           }).ToList()
                            }).ToList()select o).ToList();

        ViewBag.ShippedMessage = list.Where(w => w.HasBeenShipped).Any() ? "Order has been shipped" : "Order is being processed";

        return View(list);
    }

我可以建议你再做两件事

公共操作结果编辑器id 在这里,您将通过其Id获取订单,映射到ViewModel并将其传递到视图,在视图中您将有文本框进行编辑。创建另一个操作以接受更新模型的post请求:

[HttpPost] 公共操作结果EditOrderArchiveViewModel模型
提交编辑页面后,您将拥有一个带有新数据的更新模型,然后在数据库中按Id查找您的模型并更新属性。

您能否发送视图代码以获得更多说明

已经给出的答案可以重定向到页面进行编辑

是否要在网格上方显示编辑字段

为此,可以添加新的ViewModel,如

public class NewViewModel
{        
    public OrderArchiveViewModel OrderArchiveViewModel { get; set; }
    public List<OrderArchiveViewModel> OrderArchiveViewModelList { get; set; }
}

您可以使用此NewViewModel将数据发送到包含可编辑OrderArchiveViewModel(取决于Id)和OrderArchiveViewModel列表的视图,方法是分配索引操作中的列表

典型的模式是为此在控制器上创建更新操作。它将有自己的视图模型,您可以在其中选择可编辑字段。然后,您需要向网格中添加一个链接到该操作的编辑按钮。创建、删除与此相同。看,我不会称它们为索引——这意味着一个集合。