モデルのプロパティの入力ボックス(テキストボックス)を作成するにはどのように私は、項目のリストを含む単純なショッピング・カート・モデルを持っている
<%using (Html.BeginForm("Recalculate", "ShoppingCart", Model))
{ %>
<table id="cartTable" border ="5px" cellpadding="5px" cellspacing="5px" width="640">
<tr>
<td><b>Item Name</b></td>
<td><b>Item Qty</b></td>
<td><b>Item Price</b></td>
<td><b>Subtotal</b></td>
</tr>
<%
if (Model != null && Model.Items != null)
{
foreach (ShoppingCart.Models.Item item in Model.Items)
{
%>
<tr>
<td><%: item.Name%></td>
<td><%: Html.TextBoxFor(m => m.Items[Model.Items.IndexOf(item)], new { @Value = item.Quantity })%></td>
<td><%: String.Format("{0:C}", item.Price)%></td>
<td><%: String.Format("{0:C}", item.TotalCost)%></td>
</tr>
<%
}
}
%>
<!-- some other rows/columns go here -->
</table>
<input type="submit" value="Update Cart" />
<%} %>
そして、私のコントローラ::私はCLIC残念ながら
public class ShoppingCartController : Controller
{
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Show(ShoppingCart model)
{
if (model!= null && model.Items == null)
{
List<Item> items = new List<Item>();
items.Add(new Item { Name = "Hat", Price = 20.0, Quantity = 1 });
items.Add(new Item { Name = "Snowboard", Price = 430.0, Quantity = 1 });
items.Add(new Item { Name = "Goggles", Price = 24.0, Quantity = 3 });
model.Items = items;
model.Tax = 6.5;
}
return View(model);
}
[HttpPost]
public ActionResult Recalculate(ShoppingCart model)
{
if (model != null && model.Items!=null)
{
foreach (Item item in model.Items)
{
if (item.Quantity == 0)
{
model.Items.Remove(item);
}
else if (item.Quantity < 0)
{
ModelState.AddModelError("error", "The quantity for " + item.Name + " must not be smaller than 0.");
}
}
}
return RedirectToAction("Show", "ShoppingCart", model);
}
}
私は、次のビューを作りましたkをクリックして、[再計算]機能を呼び出しますが、アイテムリストのアイテムはすべてnullになりました。アイテムを保持し、アイテムの数量を更新するにはどうすればよいですか?
BeginForm関数では、現在のモデルを渡してみましたが、モデルを渡しませんでした...何も変わりません。誰も私がこれを理解するのを助けることができますか?
これは非常に参考になりました。他のプロパティはどのようにフォームに渡されますか?それらを編集可能にしたくありません。アイテム名やコストを編集する必要はありません。 – Kiril
発信時にバインドされるため、正しく表示されます。しかし、これらの要素はポストバックされていないため、再計算では、これらのプロパティはモデルに設定されません。このためには、モデル内に(DBから)再入力するか、フィールドを隠します。 –