2013-08-18 362 views
0

我有一個與顯示購物項目的項目模型綁定的視圖。我想要添加一個數量文本字段並將該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

大多數問題是,您的隱藏ID標記中有一個「)」,這會使您的HTML標記無效,並且最終結果與隱藏從未出現過的相同:) – Romias

回答

0

這條線:

@Html.HiddenFor(id => id.ItemId, new { @class = "id" }) 

需要在您的使用語句內。您的提交按鈕/輸入也一樣。爲了讓Ajax表單正確提交,這兩個必須位於Using塊內。

0

您可以使用窗體集合如下,

查看:

@Html.HiddenFor(m=>m.ProductID) 

控制器:

[HttpPost] 
    public void HiddenForExample(FormCollection collection) 
    { 
     string productid = Convert.ToString(collection["ProductID"]); 
    } 
0

這裏是將張貼id到控制器的控制(並記的括號中,應刪除):

<input type="hidden" name="id" class="id") /> 

模型聯編程序將使用此控件來填充控制器操作中的String id參數。由於您對它進行了硬編碼,所以在發佈到控制器之前操縱其值的唯一方法是使用javascript。你確定你是這麼做的嗎?否則,該值將會空白。

此外,爲您的Ajax選項,你應該設置你的方法張貼:

HttpMethod = "POST" 

我不能看到HTML行動特定控制器動作需要什麼,但我猜它已被裝飾[HttpPost]

相關問題