Как лучше всего реагировать на нажатия флажков в представлении списка MVC? - PullRequest
1 голос
/ 25 марта 2009

В моем приложении MVC есть список, в котором рядом с каждой записью отображается флажок:

<% For Each item In Model%>
    <%=Html.CheckBox("Selected", item.select_flag, New With {.onclick = "this.form.submit();"})%>
    <%=Html.Hidden("ID", item.id)%>
    <%=item.name%>
    <br/>
<% Next%>

Как вы можете сказать из onclick, я отправляю форму каждый раз, когда пользователь нажимает флажок. В контроллере мое почтовое действие выглядит так:

<AcceptVerbs(HttpVerbs.Post)> _
Function List(ByVal Selected() As Boolean, ByVal ID() As String) As ActionResult

    For i = 0 To ID.Count - 1
        If Selected(i) Then
            [use ID(i) to update a database row]
        End If
    Next

    Return View(GetTheListOfNamesAndIds())

End Function

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

Каков наилучший способ настроить это так, чтобы при установке флажка обновлялась определенная строка базы данных? Можно ли это сделать без перезагрузки списка каждый раз?

1 Ответ

2 голосов
/ 25 марта 2009

Попробуйте обернуть каждую «строку» в ее собственную AjaxForm или использовать jQuery для обновления через AJAX, а затем передать данные, необходимые для действия, через значения маршрута (или значения формы) в AJAX get / post. AjaxForm захочет обновить некоторый элемент DOM новым содержимым, но вы можете обойти это, если обновите сообщение об ошибке (безуспешно, если есть успех), а не фактическую строку и не сделаете какие-либо локальные изменения через javascript. С jQuery AJAX у вас гораздо больше возможностей для обработки, но вам, возможно, придется реализовать больше кода на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...