ASP.NET MVC использует UpdateModel для публикации дочерних записей - PullRequest
1 голос
/ 03 апреля 2009

Продолжая с этого вопроса, у меня есть форма со всеми транспортными средствами, перечисленными для человека, поля транспортных средств доступны для редактирования, и теперь они успешно отправляются обратно в мое действие Сохранить.

Теперь я хотел бы использовать UpdateModel для сохранения данных, но я не уверен, как их сконструировать. Вот мое действие Сохранить сейчас:

<ActionName("Edit"), AcceptVerbs(HttpVerbs.Post)> _
Function Save(ByVal form As Person, ByVal vehicles() As Vehicle) As ActionResult
    Dim original = From v In MyDataContext.Vehicles Where v.person_id = Person.person_id
    For Each item In original
        For i = 0 To vehicles.Count - 1
            If vehicles(i).vehicle_id = item.vehicle_id Then
                UpdateModel(item, New String() {"license_nbr", "color"})
                Exit For
            End If
        Next
    Next
    MyDataContext.SubmitChanges()
    Return RedirectToAction("Index", "Home")
End Function

Когда я запускаю это, оно ничего не сохраняет, а UpdateModel не выдает никаких ошибок. Я предполагаю, что мне нужно дать ему немного больше направления, чтобы заставить магию работать, потому что UpdateModel не знает, какой элемент в массиве транспортных средств использовать для каждого обновления.

Нужно ли указывать ValueProviderResult в качестве третьего параметра для UpdateModel? Если так, как я могу создать один из транспортных средств (я)? Я совершенно не в курсе, как мне это настроить?

1 Ответ

3 голосов
/ 03 апреля 2009

Зачем использовать UpdateModel - который просто обновляет свойства из полей формы - когда у вас уже есть поля формы, обработанные в данные модели? Вы не можете просто присвоить значения от vehicle до item напрямую?

For Each item In original
    For i = 0 To vehicles.Count - 1
        If vehicles(i).vehicle_id = item.vehicle_id Then 
           item.license_nbr = vehicles(i).license_nbr
           item.color = vehicles(i).color
           Exit For
        End If
    Next
Next
...