Добавление переменной к имени viewbag для каждого цикла - PullRequest
0 голосов
/ 02 ноября 2011

У меня есть приложение mvc 3 vb.net, для которого мне нужно сгенерировать несколько пакетов просмотра ... Я попробовал следующий код, чтобы просто отбрасывать переменную в конце имени пакета просмотра после каждого цикла, но он не будет работать ..Он говорит: «Переменная объекта или переменная блока не установлена».когда это вторая строка viewbag.status (p) на втором проходе, она проходит через цикл ...

     Dim p As Integer = 0
        For Each registrant In b
            Dim _regi As attendance = registrant
            Dim _status As New List(Of String)
            If Not String.IsNullOrWhiteSpace(_regi.Completed_Class) Then
                _status.Add(_regi.Completed_Class)
            End If
            _status.Add("--")
            _status.Add("Absent")
            _status.Add("Left Early")
            _status.Add("Completed")
            ViewBag._status(p) = _status
            p = p + 1
        Next

И вид выглядит так:

  @ModelTYPE List(Of xxxxxx.attendance)
  @Code
  ViewData("Title") = "Class Attendance Record"
 End Code
 @Using Html.BeginForm
 @<fieldset>
<table>
<tr>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Registrant ID</th>
    <th>Course Status</th>
    <th>Comments</th>

</tr>

 @For r As Integer = 0 To Model.Count - 1
    Dim i As Integer = r
    @Html.HiddenFor(Function(m) m(i).id)
    @Html.HiddenFor(Function(m) m(i).course_ref)



  @<tr>        
    <td>@Html.DisplayFor(Function(m) m(i).firstName)
        @Html.HiddenFor(Function(m) m(i).firstName)
    </td>

    <td>@Html.DisplayFor(Function(m) m(i).lastName)
         @Html.HiddenFor(Function(m) m(i).lastName)
    </td>
    <td>@Html.DisplayFor(Function(m) m(i).reg_id)
         @Html.HiddenFor(Function(m) m(i).reg_id)
    </td>

    <td>@Html.DropDownListFor(Function(m) m(i).Completed_Class, New SelectList(ViewBag._status(i)))
        @Html.HiddenFor(Function(m) m(i).Completed_Class)
    </td>
    <td>@Html.TextBoxFor(Function(m) m(i).Comments, New With {.class = "AttenComment"})
         @Html.HiddenFor(Function(m) m(i).Comments)
   </td>
</tr>
Next
</table>
<p><input type="submit" name="submit" /></p>
</fieldset>
End Using

Любые идеи???

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Я просто создал viewbag внутри для каждого цикла моего представления ... Таким образом, каждый раз, когда он проходил через цикл для обработки каждого элемента в таблице, он также генерировал этот viewbag для выпадающего списка ..

0 голосов
/ 02 ноября 2011

Согласно предоставленному вами коду, ViewBag._status фактически содержит List(Of List(Of String)).Другими словами, каждый `ViewBag._status (p) фактически содержит List (Of String), а _status сам по себе является списком или массивом.

Я думаю, что ваша проблема решится, если вы выполните всю работусначала, затем установите ViewBag._status после завершения цикла.

Dim statusLists As New List(Of List(Of String))
For Each registrant In b
    Dim _regi As attendance = registrant
    Dim _status As New List(Of String)
    If Not String.IsNullOrWhiteSpace(_regi.Completed_Class) Then
        status.Add(_regi.Completed_Class)
    End If
    _status.Add("--")
    _status.Add("Absent")
    _status.Add("Left Early")
    _status.Add("Completed")
    statusLists.Add(_status)
Next
ViewBag._status = statusLists
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...