對不起,這裏有大量的代碼,但它是解釋發生的最好方法。MVC 4 Ajax.BeginForm POST不綁定到控制器中的模型
我在MVC 4局部視圖給這個代碼:
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("TestPost", new AjaxOptions { HttpMethod = "Post" }))
{
foreach (var d in Model.DataItemsWithLabels)
{
@Html.LabelFor(m => d.DataName)
@Html.TextBoxFor(m => d.DataValue);
}
<input type="submit" value="Save" />
}
我的控制器操作如下:
public ActionResult TestPost(CmaPartialModel model)
{
return PartialView("Transaction", model);
}
在我的模型我有一些代碼,填充對象的列表(只有當它們是空的時)定義爲:
public List<DataItemWithLabel> DataItemsWithLabels { get; set; }
public class DataItemWithLabel
{
public string DisplayName { get; set; }
public string DataName { get; set; }
[Required]
public string DataValue { get; set; }
}
我也有什麼想法是正確的web.config中的條目:
我已閱讀這裏沒有成功別處職位的負載。
該代碼發佈到TestPost
方法,但模型始終爲空。有人可以告訴我爲什麼這可能是?
感謝林 - 我已經有一個列表完全像我的ViewModel - 我稱之爲CmaPartialModel。你的解決方案几乎可以工作,但我可以看到的唯一區別是for循環而不是foreach - 爲什麼foreach是問題或者我錯過了什麼? – davy
hi @davy,問題不在於使用for或foreach來循環所有的DataItemWithLabel模型,你可以使用任何一個。問題是當你使用foreach循環所有的項目時,model binder不知道如何將數據綁定到它。因此,您需要創建類似索引的內容來標記所有項目,然後模型綁定器綁定所有項目列表的數據。我更新了關於如何使用foreach來做到這一點的答案,請看看它。 – Lin