我的视图与显示购物项目的项目模型相关联。我想添加一个数量文本字段,并将itemID和数量提交给控制器。我正在使用AJAX表单。
AJAX表格:
@using (Ajax.BeginForm("AddToCart", "PizzaBasket",
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
OnFailure = "searchFailed",
LoadingElementId = "ajax-loader",
UpdateTargetId = "basketSummary",
}))
{
@Html.HiddenFor(id => id.ItemId, new { @class = "id" })
<input type="hidden" name="id" class="id")/>
<label for="quantity">Quantity</label>
<input type="text" name="quantity" size="5"/>
<input type="submit" value="Add to Cart" />
<img id="ajax-loader" src="@Url.Content("~/Content/Images/ajax-loader.gif")" style="display:none"/>
}
控制器操作:
public ActionResult AddToCart(String id, String quantity) {
/*Add to cart*/
return RedirectToAction("Index");
}
但是,id值未提交。需要了解如何将AJAX表单中的id值传递给控制器。请注意,在同一个文件中@ Model.itemId工作正常。
答案 0 :(得分:0)
这一行:
@Html.HiddenFor(id => id.ItemId, new { @class = "id" })
需要在Using语句中。提交按钮/输入也是如此。为了使ajax表单正确提交,这两个必须在Using块中。
答案 1 :(得分:0)
您可以按如下方式使用Forms Collection,
查看:
@Html.HiddenFor(m=>m.ProductID)
控制器:
[HttpPost]
public void HiddenForExample(FormCollection collection)
{
string productid = Convert.ToString(collection["ProductID"]);
}
答案 2 :(得分:0)
以下是将id
发布到您的控制器的控件(并记下括号,应删除它):
<input type="hidden" name="id" class="id") />
模型绑定器将使用此控件来填充控制器操作中的String id
参数。由于您正在对其进行硬编码,因此在发布到控制器之前操作其值的唯一方法是使用javascript。你确定你这样做吗?否则,该值将为空。
此外,对于您的Ajax选项,您应该将方法设置为post:
HttpMethod = "POST"
我无法看到您的特定控制器操作所期望的HTML Action,但我猜它已用[HttpPost]