我有一個包含賣家集合的視圖模型的局部視圖。我遍歷所有的賣家呈現列表。這裏是視圖模型:HTML表單提交集合中的單個項目
public class SellersPartialViewModel
{
public IList<OrderViewModel> Sellers { get; set; }
}
在局部視圖我使用Html.BeginCollectionItem(「賣方」),當我遍歷集合,這裏是我的部分碼(僅供參考,我剝奪待看到了很多無用的代碼並不需要):
<div id="sellers-list">
@{
var i = 0;
while (i < Model.Sellers.Count) {
var seller = Model.Sellers[i];
using (Ajax.BeginForm(MVC.Video.PurchaseShares(), purchaseSharesAjaxOptions, new { @class = "seller-form", id = "seller-form-" + i })) {
@using(Html.BeginCollectionItem("Sellers")) {
@Html.TextBoxFor(m => seller.Qty, new { @class = "buyer-qty" })
@Html.ValidationMessageFor(m => seller.Qty)
<input class="buyer-qty-submit" name="Qty" type="hidden" value="" />
<button type="submit">Buy</button>
}
}
}
i++;
}
}
</div>
但是我想這工作正常渲染局部和獲取客戶端驗證工作 每個賣家有輸入命名qty
和對於稱爲PurchaseShares(int orderId, int qty)
的控制器動作,使用orderId
。
唯一的問題是表單被提交與奇怪的GUID像Sellers[5b5fd3f2-12e0-4e72-b289-50a69aa06158].seller.Qty
我明白是正確的提交集合,但我不需要那樣做。
現在我有一些Javascript正在更新class="buyer-qty"
與他們選擇的任何東西,它工作正常,但必須有一個更好的方式做到這一點,不是嗎?
感謝
這看起來很有前途,我將不得不嘗試一下。我想知道爲什麼我必須爲OrderViewModel創建一個部分? Html.Partial是否在幕後做了一些無法在主要局部視圖中完成的事情? – Ryan
使用部分輸入字段的名稱將是'Qty'而不是'seller.Qty'。所以如果你不使用partial,你必須用'[Bind]'屬性在'PurchaseShares'動作上修飾'OrderViewModel'動作參數,以指定'seller'前綴。 –
非常感謝! – Ryan