我是 MVC 的新手。我无法将数据从视图传递到控制器。
此应用程序用于订购衬衫。我有不同的类型,如 T 恤、休闲衬衫和正式衬衫。在一个订单中,我想订购 2 件 T 恤、3 件休闲衬衫和 5 件正式衬衫。我能够以一个顺序编辑单个值,即它们中的任何一个。我面临的问题是在一个订单中订购多种类型的衬衫。
public class Shirt
{
//[Key]
public int ShirtId{ get; set; }
public string ShirtName{ get; set; } // This is an read-only field
}
public class Order
{
public int ShirtId { get; set; }
public virtual Shirt Shirt { get; set; } // a reference to Shirt
public int Quantity { get; set; }
public int OrderId { get; set; }
}
我有一个用我的视图模型“订单”强类型的视图。最初我将数据从我的控制器传递到视图使用
[HttpGet]
public ActionResult Index()
{
OrdersList();
return View(db.Order.ToList());
}
这里的 OrdersList 是一个与数据库交互并获取 Orders 列表的函数
void OrdersList()
{
ViewBag.OrdersLsit= from f in db.Shirt
orderby f.ShirtName
select f;
}
我正在使用将数据返回给控制器,
[HttpPost]
public ActionResult Index(List<Order> order)
{
Order newOrder = new Order();
for (int i = 0; i < order.Count; i++)
{
newOrder.Quantity = order.ElementAt(i).Quantity;
if (ModelState.IsValid)
{
db.Entry(newOrder).State = EntityState.Modified;
db.SaveChanges();
}
}
}
我的问题是列表顺序作为空值传递。如果我
在 HttpPost 中执行 public ActionResult Index(Order order),我只会得到第一项(在这种情况下,T 恤正在数据库中更新)。
在 Index.cshtml 中,我正在做这样的事情
<legend>Order Shirts</legend>
<table>
<tr>
@{List<Order> orderList = new List<Order>(); }
@foreach (Order ord in ViewBag.OrderList)
{
<td>
@Html.DisplayFor(model => ord.Shirt.Shirtname)
</td>
orderList.Add(ord);
}
</tr>
<tr>
@for (int i = 0; i < orderList.Count; i++)
{
<td class = "editorClass">
@Html.HiddenFor(model => orderList.ElementAt(i).Shirt.ShirtId)
@Html.HiddenFor(model => orderList.ElementAt(i).OrderId)
@Html.ValidationSummary(true)
@Html.HiddenFor(model => orderList.ElementAt(i).ShirtId)
@Html.EditorFor(model => orderList.ElementAt(i).Quantity)
@Html.ValidationMessageFor(model => orderList.ElementAt(i).Quantity)
</td>
}
</tr>
</table>
</fieldset>
<p>
<input id = "btnSubmit" type="submit" value="Save Order" />
</p>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
我是 MVC 新手,这是我的第一个应用程序。任何建设性的意见和建议表示赞赏。谢谢