我搜索了四周,找不到我的問題的答案。在foreach循環中的表單不會將模型發回控制器
我有一個觀點,即需要接受Foo
在像這樣:
@model IEnumerable<MyApplication.Models.Foo>
裏面我有一個表視圖。我通過我的Foo
模型填充表格,只是執行簡單的foreach
循環。我添加了一列,用戶可以在文本區域的每一行添加詳細信息並保存。
所以認爲是這樣的:
@foreach (var item in Model)
{
<tr>
<th>
@using (Html.BeginForm("AddDetails", "MyController", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(u => item.Id)
@Html.TextAreaFor(u => item.Details, new { @class = "form-control" })
<input type="submit" value="Save" class="btn btn-sm btn-default" />
}
</th>
</tr>
}
我的控制器的設置是這樣的:
[HttpPost]
public ActionResult AddDetails(Foo foo)
{
}
當我設置一個斷點該控制器上foo
總是有null
值的Details
財產和Id
始終爲0
。當它傳遞到視圖中時,它的所有屬性都設置爲正確,所以我不確定它爲什麼不能正確回發?
我已經試過這樣:
@using (Html.BeginForm("AddDetails", "MyController", FormMethod.Post, new { foo = Model }))
我也試圖消除foreach
循環和改變它只是一個單一的模型視圖和查看通過接受只是單一的模式,而不是IEnumerable
。當我這樣做時,它會回傳得很好。
而且這也行不通。我想知道這是否與我的表單處於foreach
循環內有關,也許我需要做更多的工作,比如爲元素添加一個data-id
屬性,然後捕獲按鈕上的單擊事件並執行一個AJAX調用控制器並傳遞正確的值?
編輯對不起,我完全忘了視圖模型。這裏是什麼樣子:
public class Foo
{
public int Id { get; set; }
public string Details { get; set; }
}
如果您更多地瞭解與視圖綁定的視圖模型/使用表格 – mmcrae
將「foreach」更改爲「for」循環時會發生什麼,可能會有所幫助?我很確定這是你的問題,因爲這樣,默認的modelbinder不能正確地重建你的對象來發布。 [看這個問題](http://stackoverflow.com/questions/15636284/for-each-loop-with-controls-and-submitting-form-html-beginform-in-mvc-4)作爲參考 – Jonesopolis
@Jonesopolis我會嘗試將其更改爲'for'循環。我擺脫了'foreach'循環只是爲了測試它,當我擺脫它時它會回傳得很好。我嘗試過之後會更新另一條評論。 – maxshuty