MVC模型绑定编辑列表不工作(MVC model binding to edit a list no

2019-10-21 01:24发布

我想不通,为什么这是不行的。 我读过(在这里和整个网络)一切说,这是如何绑定到编辑列表,但我并没有任何成功。 我有两个问题:

  1. 由视图发出的HTML表单元素不被编入索引(每一个被命名为“数量”和“BoxID”而不是“[0] .Qty”和“[0] .BoxID”)。 我已经在这个元旦晚会New Year读到的一切说HTML.EditorFor和HiddenFor助手会自动选择这个了。

  2. 甚至当我手动更改视图吐出正确的HTML(用正确的名称表单元素)模型绑定未正确发生,并在控制器的操作方法收集参数为null。

有任何想法吗? 难道我做错了什么?

这里的观点:

@ModelType IEnumerable(of HonorBox)
@Code
ViewData("Title") = "Index"
End Code

<h2>Index</h2>

@Html.BeginForm("Index", "HonorBoxes")
@Html.AntiForgeryToken()


@For x = 0 To Model.Count - 1
    @<tr>
         <td>
             @Html.DisplayFor(Function(i) Model(x).BoxID)
             @Html.HiddenFor(Function(i) Model(x).BoxID)
         </td>
         <td>
             @Html.TextBoxFor(Function(i) Model(x).Qty)
             @Html.ValidationMessageFor(Function(i) Model(x).Qty)
         </td>
    </tr>
Next

而这些控制器方法:

    Function Index() As ActionResult
        Dim hb = From h In db.honorBoxes Select h Where Not h.Filled And Not h.Hold
        Return View(hb.ToList())
    End Function

    <HttpPost>
    Function Index(boxes As IEnumerable(Of HonorBox)) As ActionResult
        If ModelState.IsValid Then
            For Each box In boxes
                Dim cbox = db.honorBoxes.Find(box.BoxID)
                If Not IsDBNull(box.Qty) AndAlso cbox.Qty <> box.Qty Then
                    cbox.Qty = box.Qty
                    cbox.Filled = True
                End If
            Next
            db.SaveChanges()
        End If
        Return RedirectToAction("Index")
    End Function

最后,这里的模型

Public Class HonorBox
    <Key> Public Property BoxID As Integer
    Public Property AssetID As Nullable(Of Integer)
    Public Property Asset As Asset
    Public Property BoxType As String
    Public Property Hold As Nullable(Of Boolean)
    Public Property Filled As Nullable(Of Boolean)
    Public Property Qty As Nullable(Of Integer)
End Class

Answer 1:

为了使模型粘合剂把它捡起来的模式类型必须是类型的List不是IEnumerable

它更改为这将工作:

@ModelType List(of HonorBox)


文章来源: MVC model binding to edit a list not working