C# 如何从ASP.NET MVC视图中动态添加和删除行项目?

C# 如何从ASP.NET MVC视图中动态添加和删除行项目?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个PurchaseOrder型号: public class PurchaseOrder { public string OrderNumber { get; set; } public string Customer { get; set; } public IList<LineItem> Lines { get; set; } } 我想做的是在我的视图中,对于PurhcaseOrder创建操作,我需要一个用于行项目的部分。用户应该能够添加新行,删

我有一个PurchaseOrder型号:

public class PurchaseOrder
{ 
    public string OrderNumber { get; set; }
    public string Customer { get; set; }
    public IList<LineItem> Lines { get; set; }
}
我想做的是在我的视图中,对于PurhcaseOrder创建操作,我需要一个用于行项目的部分。用户应该能够添加新行,删除行,然后提交。需要注意的是,零件号必须是有效零件的下拉列表


我能做些什么来完成我想要的呢?

我会在客户端用jQuery创建这个功能

零件号1345-124项[移除] 零件号1489-101项目[移除]

[选择零件名称/][数量][添加]


另外,对于禁用JS的客户端,您可以使用完全相同的UI和服务器端代码复制此功能。为了做到这一点,当用户单击“添加行项目”时,您可以将临时行项目存储在每个回发邮件的TempData中。

如果您想在没有js的情况下完成所有操作,请创建一个用于添加和编辑行项目的新操作/视图。对于删除,让actionlink删除该项是不好的做法,GET不应该更改数据。因此,一个好的模式是将删除链接转到确认页面。从该页面发布到“删除”操作或“取消并返回”

对于这一点非常有用

显示可以添加/删除行并包含下拉列表的编辑器


还有一篇老文章讨论了在asp.net mvc中使用Knockoutjs-

如果禁用Javascript会发生什么?@Kieron:您构建它是为了让它对删除进行真正的回发,而不是AJAX回发,例如,使用AJAX.ActionLink或类似的jquery。添加需要使用数据回发以指示应添加新行。这种情况很少发生,但您可以使用这些客户端的服务器端代码复制此功能。
public class LineItem
{ 
   public string PartNumber { get; set; }
   public int Quantity { get; set; }
}