0

我正在尝试为添加到购物车的商品数量实现数量选择器。

我有一个文本框,其中包含目录中每一行项目的动态名称。每行都有一个“添加到购物车”按钮。

如果我在文本框中输入所需数量并单击“添加到购物车”按钮,我希望将所选项目的输入数量添加到我的购物车中。

将新数量添加到购物车数据库的控制器操作如下:

public ActionResult AddToCart(int productID, int quant)
{
    repository.AddItemToOrder(productID, quant);
    return RedirectToAction("Browse");
}

我知道调用“浏览”操作再次呈现页面并不是最有效的方法。我稍后会解释。

我的问题是:如何使用两个参数调用此“AddToCart”控制器操作?

我能够获得一个使用 1 个参数的版本。在这种情况下,上述控制器动作中的第二个参数 quant 被删除。

我的观点是:

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'  " value="Add to Cart" />

虽然这有效,但我需要能够参考数量的文本框。

我尝试了在我的视图中包含多个参数的下一行:

<input type="button" onclick="document.location.href = '<%: Url.Action("AddToCart") %>'+'?productID=<%: item.ProductID %>'+'?quant=<%: item.ProductID %>'  " value="Add to Cart" />

分配给“quant”的值与分配给“productID”的值相同。我这样做只是为了让某些东西正常工作。一旦它工作,我计划使用具有动态名称的文本框的值。(我也需要一些帮助)

当我测试并单击该行的按钮时,我收到以下错误:

参数字典包含“OER.Controllers.eCommerceController”中方法“System.Web.Mvc.ActionResult AddToCart2(Int32, Int32)”的不可为空类型“System.Int32”的参数“productID”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数

4

2 回答 2

2

您需要&在查询字符串中的变量之间使用与号 , ,而不是另一个?......简单的错字。

/AddToCart?productId=3&quant=1

如果你想给出quant一个默认值,所以它并不总是需要,你可以将你的操作方法更改为:

public ActionResult AddToCart(int productID, int quant = 1)

根据您的评论,我将设置一个按钮将提交的表单,而不是将其全部压缩到onclick

@using(Html.BeginForm("AddToCart")) {
    @Html.Hidden("productId", item.ProductId)
    @Html.Input("quant")
    <input type="submit" value="Add to Cart" />
}

如果您只想切换到常规链接而不是按钮,则需要连接一些 jQuery 以quant在单击时从文本框中提取参数。

$('.addToCartLink').click(function() {  // All the "add to cart" links would have this class
    // Pull the product ID (just an example)
    var productId = $(this).attr('data-id');
    // Set the quantity
    var quantity = $('#txtlinequantity-'+productId).val();
    // Possible validation here
    ...
    // Hit the action method
    window.location = '/AddToCart?productId='+productId+'&quant='+quantity;
});
于 2011-06-21T22:24:51.320 回答
0

你不想

<input type="button" value="<%: item.ProductID %>" name="productID" id="productID"/>

在您提交的表格内?

如果你有一个表单元素被提交,MVC 会自动拉取所需的信息,并根据name字段(或id)将其分配给你代码中的等效变量。该value字段是分配给相应变量的值。

于 2011-06-21T22:30:13.263 回答