2013-04-01 3 views
0

У меня есть GridView с TemplateField с LinkButton. Когда эта кнопка нажата, она преобразует некоторый XML, который находится в другом скрытом TemplateField, в строку и назначает его метке в скрытом div, который будет использоваться в модальном диалоговом окне. В настоящее время диалог открывается, как ожидается, с соответствующей информацией, он закрывается, и я могу выбрать другую запись в сетке для просмотра без проблем. Здесь все идет не так, и я не смог найти решение. Если я сделаю что-то еще на странице, которая вызывает обратную передачу, откроется последнее диалоговое окно, которое будет открыто при загрузке новой страницы.jQuery Диалог снова появляется на обратной стороне

Вот моя соответствующая наценка:

<script type="text/javascript"> 
$(document).ready(function() { 
    $("#txtBeginDate").datepicker(); 
    $("#txtEndDate").datepicker(); 

    $("#response").dialog({ 
     autoOpen: false, 
     modal: true, 
     height: "auto", 
     width: "auto", 
     title: "Equifax Response", 
     close: function(ev, ui) { 
      $(this).dialog('destroy').remove(); 
     } 
    }); 

    $("[id*=lnkEquifaxResponse]").on("click", function EquifaxResopnse() { 
     $("#lblDialog").empty(); 
    }); 

    if ($("#lblDialog").text() != "") { 
     $("#response").dialog("open"); 
    } 
}); 
    </script> 

    <div id="response" visible="false"> 
     <asp:Label ID="lblDialog" runat="server" ></asp:Label> 
    </div> 

    <div id="Gridview"> 
     <asp:GridView ID="grClientTransactions" runat="server" AllowPaging="True" 
      PageSize="25" AutoGenerateColumns="False" DataKeyNames="ResponseXML" 
      EmptyDataText="Record not found." EmptyDataRowStyle-BackColor="#CCCCCC" EmptyDataRowStyle-Font-Bold="true" 
      CssClass="mGrid" PagerStyle-CssClass="pgr" 
      AlternatingRowStyle-CssClass="alt" 
      OnPageIndexChanging="grClientTransactions_PageIndexChanging" 
      onrowcommand="grClientTransactions_RowCommand"> 

      <Columns> 
       <asp:TemplateField ShowHeader="false"> 
        <ItemTemplate> 
         <asp:LinkButton ID="lnkEquifaxResponse" runat="server" CommandName="EquifaxResponse" Text="View" CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'></asp:LinkButton> 
        </ItemTemplate> 
       </asp:TemplateField> 

       <asp:TemplateField Visible="false" HeaderText="Equifax Response"> 
        <ItemTemplate> 
         <asp:Label ID="lblEquifaxResponse" runat="server" Text='<%# Bind("ResponseXML")%>' ></asp:Label></div>        
        </ItemTemplate> 
       </asp:TemplateField> 

      </Columns> 
      <PagerStyle CssClass="pgr" /> 
      <AlternatingRowStyle CssClass="alt" /> 
     </asp:GridView> 
    </div> 

Я новичок в программировании, так что любая помощь будет принята с благодарностью.

ответ

1

Обновить код как это:

<div id="response" visible="false"> 
    <asp:Label ID="lblDialog" runat="server" EnableViewState="False"></asp:Label> 
</div> 

Насколько я понимаю, когда вы нажимаете на ссылку, lblDialog заполняется с некоторыми данными о сервере и из ViewState включен, что данные восстанавливаются на каждом постбэк. Than, if, показанный ниже, возвращает true, и появляется всплывающее окно.

if ($("#lblDialog").text() != "") { 
    $("#response").dialog("open"); 
} 

Если вы добавите EnableViewState = «ложь», внутренний текст lblDialog будет потерян на второй постбэка и звукозаписывающей компанией будет пустым после загрузки страницы (если не звено в сетке щелкнул).

Вы можете получить более подробную информацию о ViewState и как она работает here

+0

Спасибо! кто это сделал. Я уже два дня бил головой об этом. –