私はMVCが初めてです。ビューからコントローラーにデータを渡すのに問題があります。
このアプリケーションは、シャツを注文するためのものです。Tシャツ、カジュアルシャツ、フォーマルシャツなど、さまざまなタイプがあります。1回の注文で、Tシャツ2枚、カジュアルシャツ3枚、フォーマルシャツ5枚を注文したいです。単一の値、つまりいずれかを 1 つの順序で編集できます。私が直面している問題は、1 回の注文で複数の種類のシャツを注文することです。
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();
}
}
}
私の問題は、リストの順序が Null として渡されることです。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 を初めて使用し、これが私の最初のアプリケーションです。建設的なコメントや提案を歓迎します。ありがとう