C# 编辑视图模型
我有我的ViewModel,我有我的控制器可以从ViewModel正确显示,但是我不确定如何使ViewModel可编辑,以便将编辑后的数据发送回模型。我只想编辑OrderArchiveViewModel,不想编辑详细信息 视图模型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
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列表的视图,方法是分配索引操作中的列表 典型的模式是为此在控制器上创建更新操作。它将有自己的视图模型,您可以在其中选择可编辑字段。然后,您需要向网格中添加一个链接到该操作的编辑按钮。创建、删除与此相同。看,我不会称它们为索引——这意味着一个集合。