如何将模型属性值从视图发送到控制器

时间:2013-08-18 02:44:24

标签: asp.net-mvc razor

我的视图与显示购物项目的项目模型相关联。我想添加一个数量文本字段,并将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工作正常。

3 个答案:

答案 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]

进行了修饰