我确信我遗漏了一些非常明显的东西,或者我不理解我到目前为止所阅读的内容。我有一个包含数据表,其中2个字段需要可编辑。表单收到的数据为IEnumerable
。但是,当控制器功能接收到发布数据时,我没有得到任何结果,而是接收到IEnumerable
。如果我只收到原始数据类型,我会得到具有正确id字段的对象的单个实例,而所有其他字段都是空的。有人可以指点我正确的方向吗?
Partial Public Class QuoteBundlePackage_Result
Public Property id As Integer
Public Property employeeId As Nullable(Of Integer)
Public Property employeeName As String
Property bundleId As Nullable(Of Integer)
Public Property bundleDescription As String
Public Property packageId As Nullable(Of Integer)
Public Property packageContents As String
End Class
@ModelType IEnumerable(Of gbip_new.QuoteBundlePackage_Result)
@Using Html.BeginForm()
@Html.ValidationSummary(True)
<fieldset>
<legend>Quote</legend>
<table>
<tr>
<th>
@Html.DisplayNameFor(Function(model) model.employeeId)
</th>
<th>
@Html.DisplayNameFor(Function(model) model.employeeName)
</th>
<th>
@Html.DisplayNameFor(Function(model) model.bundleId)
</th>
<th>
@Html.DisplayNameFor(Function(model) model.bundleDescription)
</th>
<th>
@Html.DisplayNameFor(Function(model) model.packageId)
</th>
<th>
@Html.DisplayNameFor(Function(model) model.packageContents)
</th>
<th></th>
</tr>
@For Each item In Model
Dim currentItem = item
Html.HiddenFor(Function(modelItem) currentItem.id)
@<tr>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.employeeId)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.employeeName)
</td>
<td>
@Html.EditorFor(Function(modelItem) currentItem.bundleId)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.bundleDescription)
</td>
<td>
@Html.EditorFor(Function(modelItem) currentItem.packageId)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.packageContents)
</td>
</tr>
Next
</table>
<p>
<input id="Submit1" type="submit" value="submit" />
</p>
</fieldset>
End Using
<HttpPost()> _
Function QuoteBundlePackage(ByVal eqDetails As IEnumerable(Of Global.gbip_new.QuoteBundlePackage_Result)) As ActionResult
If ModelState.IsValid Then
'Do stuff
Return RedirectToAction("Index")
End If
Return View(eqDetails)
End Function
答案 0 :(得分:0)
模型绑定到集合的工作方式略有不同。如果您希望正确绑定集合,则需要对要循环的每个项目进行有效编号。
你要渲染的内容就像......
<input type="text" name="QuoteBundlePackage_Result[0].EmployeeID" value="" />
<input type="text" name="QuoteBundlePackage_Result[0].EmployeeName" value="" />
<input type="text" name="QuoteBundlePackage_Result[1].EmployeeID" value="" />
<input type="text" name="QuoteBundlePackage_Result[1].EmployeeName" value="" />
...这将允许框架区分每个项目。要创建这种安排,你应该在你的循环中为每个项目提供一个ID - (提前抱歉,因为答案是在c#而不是vb!)
@for (int i = 0; i < Model.Count(); i++)
{
@Html.EditorFor(e => e[i].EmployeeID)
@Html.EditorFor(e => e[i].EmployeeName)
}
请参阅Scott Hansleman和Phil Haack的相关文章。