C# MVC3&;Ajax:刷新列表以隐藏通过单击按钮从列表中删除的记录
我有一个列表,显示订阅的论坛线程,每行有一个按钮取消订阅。我可以使用Ajax取消订阅,但我想使用Ajax刷新以从列表中删除取消订阅的线程。谁能给我推荐一下吗。我的代码如下: 使用Ajax背后的想法是因为我只想刷新列表部分,而不是整个页面 Index.aspxC# MVC3&;Ajax:刷新列表以隐藏通过单击按钮从列表中删除的记录,c#,jquery,ajax,asp.net-mvc-3,asp.net-mvc-4,C#,Jquery,Ajax,Asp.net Mvc 3,Asp.net Mvc 4,我有一个列表,显示订阅的论坛线程,每行有一个按钮取消订阅。我可以使用Ajax取消订阅,但我想使用Ajax刷新以从列表中删除取消订阅的线程。谁能给我推荐一下吗。我的代码如下: 使用Ajax背后的想法是因为我只想刷新列表部分,而不是整个页面 Index.aspx <% foreach (var thread in Model.threads) { %> <tr> <td><%: thread.Title %></td>
<% foreach (var thread in Model.threads) { %>
<tr>
<td><%: thread.Title %></td>
<td><%: Ajax.ActionLink("Unsubscribe", "ToggleForumAlertFromList",
new { id = thread.ForumId },
new AjaxOptions { HttpMethod = "POST",
UpdateTargetId = "none",
new { ID = "togglealertlink" })%>
</td>
</tr>
<% } %>
您需要连接一个OnSuccess回调,该回调在POST完成时触发 此回调可以重新查询列表,也可以从列表中删除未订阅的项目
<% foreach (var thread in Model.threads) { %>
<tr id= "<%: thread.ForumId %>">
<td><%: thread.Title %></td>
<td><%: Ajax.ActionLink("Unsubscribe", "ToggleForumAlertFromList",
new { id = thread.ForumId },
new AjaxOptions { HttpMethod = "POST",
UpdateTargetId = "none",
OnSuccess = "removeItem('thread.ForumId')"
new { ID = "togglealertlink" })%>
</td>
</tr>
<% } %>
function removeItem(itemId) {
$("#" + itemId).remove();
}
函数removeItem(itemId){
$(“#”+itemId).remove();
}
这假设每个父级
元素都被分配了一个唯一的forumId,如上图所示。这似乎是可行的,但我无法理解为什么在MVC 3中使用aspx表单而不是cshtml视图。你有什么特别的问题吗?有什么东西出错了还是不起作用了?我怀疑这应该是一个帖子,而不是一个GET。最简单的方法是使用$.post()
传递id,然后在方法中返回表示成功的json,在成功回调中,只需从DOM中删除关联项(
元素)(无需再次更新整个列表)@StephenMuecke这是一个post,正如ActionLink和api中所声明的那样。您的右侧-刚刚看到了Ajax.ActionLink
,并假设它是一个GET:)@DavidL我知道cshtml工作得更好,但我们使用的一些第三方控件仅适用于aspx视图。
<% foreach (var thread in Model.threads) { %>
<tr id= "<%: thread.ForumId %>">
<td><%: thread.Title %></td>
<td><%: Ajax.ActionLink("Unsubscribe", "ToggleForumAlertFromList",
new { id = thread.ForumId },
new AjaxOptions { HttpMethod = "POST",
UpdateTargetId = "none",
OnSuccess = "removeItem('thread.ForumId')"
new { ID = "togglealertlink" })%>
</td>
</tr>
<% } %>
function removeItem(itemId) {
$("#" + itemId).remove();
}