2010-09-29 5 views
2

поэтому я использую цикл 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, который содержит в коде цикла я отправил выше.

+0

Как вы «переустанавливаете контроль»? Я вижу UpdateTargetId из «Комментарии», но я не вижу этого элемента в опубликованном вами коде. Что возвращается для этого? –

ответ

0

Иногда наличие нескольких элементов на одной странице с одинаковыми идентификаторами может вызвать фанки-результаты, которые вы видите. Попробуйте сделать идентификатор уникальным, как показано ниже:

<table> 
<% int index=1; 
    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" + index, item.CarrierId) %> 
        <%=Html.Hidden("num_comments" + index, (int)ViewData["num_comments"]) %> 
        <%=Html.Hidden("commentId" + index, item.CommentId) %> 
        <input type = "submit" value = "delete" /> 
      <%} %> 
     <% index++; 
      } %> 
    </td> 
</tr> 
<table> 
+0

, но проблема в том, как функция DeleteComment знает правильный индекс? Мой Ajax.BeginForm отправляет данные функции DeleteComment, которая принимает 3 переменные articleId, num_comments, commentId. – TPR

Смежные вопросы