我一直试图将数量传递给我的控制器,但无法弄清楚如何。我是新手,需要一些帮助!我知道我需要创建一个ActionResult UpdateCart(int BookID,int quantity),但不知道需要做什么。
这是我的观看代码:
@{
ViewBag.Title = "Cart";
}
@using FinalProject_Lio_Lopez_Jafri_Wood.Controllers;
@model ShoppingCartItem
<h2>Cart</h2>
<table class="table table-hover">
<tr>
<th>Book Title</th>
<th>Book Unique Nnmber</th>
<th>Book Price</th>
<th>Quantity</th>
<th>Option</th>
<th>Sub Total</th>
</tr>
@{decimal s = 0;}
@foreach (ShoppingCartItem item in (List<ShoppingCartItem>)Session["cart"])
{
s += item.Books1.BookPrice * item.Quantity;
<tr>
<td>@item.Books1.BookTitle</td>
<td>@item.Books1.BookUniqueNumber</td>
<td>$ @item.Books1.BookPrice</td>
<td>@Html.TextBoxFor(m => m.Quantity, new { @Value = "1", @class = "form-control" , style="width:50px;" })</td>
<td>
@Html.ActionLink("Refresh Quantity", "Update", "ShoppingCart", new{id = item.Books1.BookID, quantity = item.Quantity}) | @Html.ActionLink("Remove Item", "Delete", "ShoppingCart",
new { id = item.Books1.BookID }, null)
</td>
<td>$ @(item.Books1.BookPrice * item.Quantity)</td>
</tr>
}
<tr>
<td align="right" colspan="5">TOTAL</td>
<td>$ @s</td>
</tr>
</table>
<br />
@Html.ActionLink("Continue Shopping", "Search", "Books")
<input type="button" value="Check Out" class="btn-info btn-active" style="float: right" />
到目前为止,这是我的控制器代码:
public class ShoppingCartController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
public ActionResult Index()
{
return View();
}
private int isExisting(int id)
{
List<ShoppingCartItem> cart = (List<ShoppingCartItem>) Session["cart"];
for (int i = 0; i < cart.Count; i++ )
if(cart[i].Books1.BookID==id)
return i;
return -1;
}
public ActionResult Delete(int id)
{
int index = isExisting(id);
List<ShoppingCartItem> cart = (List<ShoppingCartItem>)Session["cart"];
cart.RemoveAt(index);
Session["cart"] = cart;
return View("Cart");
}
public ActionResult UpdateCart(int BookID, int quantity)
{
return View("Cart");
}
public ActionResult AddToCart(int id)
{
if (Session["cart"] == null)
{
List<ShoppingCartItem> cart = new List<ShoppingCartItem>();
cart.Add(new ShoppingCartItem(db.Books.Find(id), 1));
Session["cart"] = cart;
}
else
{
List<ShoppingCartItem> cart = (List<ShoppingCartItem>) Session["cart"];
int index = isExisting(id);
if (index == -1)
cart.Add(new ShoppingCartItem(db.Books.Find(id), 1));
else
cart[index].Quantity++;
Session["cart"] = cart;
}
return View("Cart");
}
}
}
答案 0 :(得分:0)
您似乎遇到了一些语法问题。我建议你使用resharper,它应该至少包含这样的语法错误。
您的控制器和视图中有不同的操作名称。 MVC还不够智能,无法确定“更新”和“UpdateCard”是一回事。
您还有另一个命名问题。如果您希望参数是URL的一部分并且不更改路由,则默认MVC路由约定是使用id
。这是可配置的,但默认是。
检查ActionLink的参数。您应该已指定路由参数,但似乎您指定了html属性。检查Html.ActionLink的声明。请注意,确保始终可以使用命名参数。
绝不能使用GET进行更新(就像你一样),因为这会引发不必要的或随机的更新。想象一下,例如搜索引擎(谷歌)索引您的网站 - 它将“点击”您的链接(导航到该),这将添加商品到购物车。不好。我建议你在asp.net mvc上查看一些入门课程......
无论如何,为了解决问题,请尝试:
控制器:
public ActionResult UpdateCart(int id, int quantity)
{
return View("Cart");
}
查看:
@Html.ActionLink("Refresh Quantity", "UpdateCart", "ShoppingCart",
new { id = item.Books1.BookID, quantity = item.Quantity}, null)