我的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
所以我在每个复选框点击后得到一个Selected值和ID的数组。我认为他们会对应,但我发现两个阵列由于某种原因不同步。每次点击一个复选框时处理整个列表也是一种过度杀伤,所以我想重新审视整个设置。
设置此项的最佳方法是什么,以便单击复选框将更新特定的数据库行?可以在不重新加载列表的情况下完成吗?
答案 0 :(得分:2)
考虑将每个“行”包装在它自己的AjaxForm中,或者使用jQuery通过AJAX进行更新,然后通过AJAX get / post中的路由值(或表单值)传递操作所需的数据。 AjaxForm会想要用新内容更新一些DOM元素,但你可以通过让它更新错误消息(如果有成功则没有任何内容)而不是实际行并通过javascript进行任何本地更改来解决这个问题。使用jQuery AJAX,您可以获得更多关于如何处理它的选项,但您可能必须在客户端实现更多代码。