поэтому я использую цикл foreach для повторения комментариев. Раздел комментариев завернут в div «Комментарии». Моя функция УдалитьComment снова извлекает комментарии после удаления комментария и возвращает его в элемент управления. Однако, после удаления комментария, в любое время, когда вы пытаетесь удалить другой комментарий, commentId самого первого удаленного комментария будет продолжать получать значение . УдалитьComment функция вместо передачи комментарияId комментария, который вы пытаетесь удалить. Если вы обновите страницу, вы можете снова удалить ОДИН комментарий, и та же проблема, если вы попытаетесь удалить другую.ajax.beginform внутри цикла for
<table>
<% foreach (var item in Model) { %>
<tr> <td>item.Comment </td>
<td>
<%if (HttpContext.Current.User.Identity.IsAuthenticated && item.Poster.UserName == HttpContext.Current.User.Identity.Name)
{ %>
<%using (Ajax.BeginForm("DeleteComment", "Home", new AjaxOptions {UpdateTargetId = "Comments"}))
{%>
<%=Html.Hidden("articleId", item.CarrierId) %>
<%=Html.Hidden("num_comments", (int)ViewData["num_comments"]) %>
<%=Html.Hidden("commentId", item.CommentId) %>
<input type = "submit" value = "delete" />
<%} %>
<%} %>
</td>
</tr>
<table>
Например, удалить комментарий с CommentID 1 ... то вы пытаетесь удалить какой-нибудь другой комментарий, но CommentID 1 будет продолжать получать пройдена. Вы обновите страницу, проблема ушла ... за один комментарий ...
<div id = "Comments">
<%if ((int)ViewData["num_comments"] > 0)
{ %>
<%Html.RenderPartial("CommentsX", Model.Comments, new ViewDataDictionary{{"num_comments", ViewData["num_comments"] }}); %>
<%} %>
</div>
где CommentsX является контроль ASCX, который содержит в коде цикла я отправил выше.
Как вы «переустанавливаете контроль»? Я вижу UpdateTargetId из «Комментарии», но я не вижу этого элемента в опубликованном вами коде. Что возвращается для этого? –