mvc表格不发表表日期

时间:2012-09-28 22:49:48

标签: asp.net-mvc razor

我确信我遗漏了一些非常明显的东西,或者我不理解我到目前为止所阅读的内容。我有一个包含数据表,其中2个字段需要可编辑。表单收到的数据为IEnumerable。但是,当控制器功能接收到发布数据时,我没有得到任何结果,而是接收到IEnumerable。如果我只收到原始数据类型,我会得到具有正确id字段的对象的单个实例,而所有其他字段都是空的。有人可以指点我正确的方向吗?

模型:(由EF模型首先生成)

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

1 个答案:

答案 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 HanslemanPhil Haack的相关文章。