1

Я не могу понять, почему это не сработает. Все, что я прочитал (как здесь, так и через Интернет), говорит, что это связано с списком для редактирования, но я не добился успеха. У меня есть две проблемы:Ссылка на модель MVC для редактирования списка не работает

  1. HTML-элементы формы, испускаемые зрения не индексируются (каждый из них называется «Кол-во» и «BoxID» вместо «[0] .Qty» и «[0] .BoxID "). Все, что я читал на этом субгиганте, говорит, что помощники HTML.EditorFor и HiddenFor должны автоматически подбирать это.

  2. Даже когда я вручную изменяю представление, чтобы вытолкнуть правильный HTML (элементы формы с правильными именами), привязка к модели не выполняется правильно, а параметр коллекции в методе действия контроллера равен нулю.

Любые идеи? Я делаю что-то неправильно?

Вот вид:

@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 

ответ

1

Для того, чтобы модель связующего, чтобы поднять его тип модели должен быть типа List не IEnumerable.

Изменение его это будет работать:

@ModelType List(of HonorBox) 
+0

Спасибо! Вот и все. –

+0

@ roger-hicks no probs. :) – hutchonoid