Обновление UpdatePanel внутри модального всплывающего окна

Очевидно, я делаю что-то не так, просто не знаю, что... У меня есть модальное всплывающее окно, и внутри него находится панель обновления, которая, в свою очередь, содержит сетку. Когда модальное всплывающее окно вызывается впервые, я хотел бы обновить Update Panel (и данные сетки).

У меня есть код, работающий так, что панель обновляется при нажатии кнопки btnHiddenJSRefresh (в настоящее время не скрыта). Но я не могу заставить это работать без необходимости нажимать кнопку!

Я пытался "нажать" кнопку через Jquery $ ("<% = btnHiddenJSRefresh.ClientID%>"). Click(); И я вижу, что это вызывается, но на странице нет реакции. То же самое с __doPostBack ("<% = btnHiddenJSRefresh.ClientID%>", "");

Также (и это может быть не связано) опция удаления в сетке не работает здесь. За пределами Update Panel все работает нормально...

Вот код, я пытался уменьшить его до основной проблемы

<ajaxact:modalpopupextender id="ModalPopupExtender1" runat="server"
cancelcontrolid="ClosePopup" okcontrolid="ClosePopup"
targetcontrolid="hidenSelectedDoc" popupcontrolid="THolder"
popupdraghandlecontrolid="PopupHeader" drag="true" BehaviorID="MPE" Y="0" backgroundcssclass="ModalPopupBG">

<div classs="ModalPopup" id="THolder" >
    <a id="ClosePopup" href="#">Close</a>
    <asp:Button ID="btnHiddenJSRefresh" runat="server" Text="Button" UseSubmitBehavior="false" OnClick="btnAddTag_Click" />

    <asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional" OnLoad="UpdatePanel2_Load" >

        <ContentTemplate>            
    <asp:GridView ID="gvPageTags" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSourcePageTags"  CssClass="TableDataHolder" DataKeyNames="CarID" >
                        <Columns>
                            <asp:BoundField DataField="FullName" HeaderText="Full Name" SortExpression="FullName" />                               
                            <asp:TemplateField HeaderText="Delete">
                                <ItemTemplate>                                           
                                        <asp:ImageButton ID="deleteButtonImg" runat="server" CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure you want to delete this car?');" ImageUrl="~/images/icons/DeleteIconS.png" AlternateText="Delete" />
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>                             
                    </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>

    <asp:SqlDataSource ID="SqlDataSourcePageTags" runat="server"
                    ConnectionString="<%$ ConnectionStrings:bobConnectionString %>"
                    SelectCommand="SELECT * FROM Cars WHERE (cMake = @cMake)"
                    DeleteCommand="DELETE * FROM Cars WHERE CarID = @CarID">                       
                    <SelectParameters>
                        <asp:Parameter Name="cMake" DefaultValue="0" Type="int32" />
                    </SelectParameters>
                </asp:SqlDataSource>

    </div>           

Код позади

protected void btnAddCar_Click(object sender, EventArgs e)
    {
        SqlDataSourcePageTags.SelectParameters["cMake"].DefaultValue = hidenSelectedcMake.Value;
        SqlDataSourcePageTags.DataBind();
        gvPageTags.DataBind();
        UpdatePanel2.Update();
    }

Любые идеи будут великолепны.

Спасибо

1 ответ

Было бы более полезно иметь весь код страницы, на который есть ссылка в вашем фрагменте кода. Тем временем я попытался смоделировать эту функциональность из вашего описания, поэтому, пожалуйста, исправьте меня, если я что-то не так понял.

При загрузке страницы я добавил блок javascript, чтобы проверить, является ли это обратной передачей. Если это не так, то я вызываю событие нажатия кнопки (btnHiddenJSRefresh) один раз, чтобы обновить модал. Кроме того, я добавил кнопку для всплывающего модального окна, см. Мой пример кода. И, наконец, в этом примере опция удаления работает нормально.

 <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

 <form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager1" runat="server" ScriptMode="Release">
                <Scripts>
                    <asp:ScriptReference Path="resources/jquery-1.11.0.js"/>
                </Scripts>
</asp:ScriptManager>

 <script type="text/javascript">

     $(document).ready(function () {
         var chkPostBack = '<%= Page.IsPostBack ? "true" : "false" %>';             

         if ( !Boolean.parse(chkPostBack) ) {                
             __doPostBack("<%= btnHiddenJSRefresh.ClientID %>", "");
         }
     });
</script>  


<asp:Button ID="shwmodal" runat="server" Text="show modal" 
    onclick="shwmodal_Click" />

<div classs="ModalPopup" id="THolder" >


<a id="ClosePopup" href="#">Close</a>



<asp:Button ID="btnHiddenJSRefresh" runat="server" Text="Button" style="display:none" OnClick="btnAddTag_Click" />



<asp:UpdatePanel ID="UpdatePanel2" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional" 
OnLoad="UpdatePanel2_Load" >

    <ContentTemplate>            
<asp:GridView ID="gvPageTags" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSourcePageTags"  CssClass="TableDataHolder" DataKeyNames="RoleID" >
                    <Columns>
                        <asp:BoundField DataField="Descr" HeaderText="Descr Name" SortExpression="Descr" />                               
                        <asp:TemplateField HeaderText="Delete">
                            <ItemTemplate>                                           
                                    <asp:ImageButton ID="deleteButtonImg" runat="server" CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure you want to delete this car?');" ImageUrl="~/images/icons/DeleteIconS.png" AlternateText="Delete" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>                             
                </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

<asp:SqlDataSource ID="SqlDataSourcePageTags" runat="server"
                ConnectionString="<%$ ConnectionStrings:bobConnectionString %>"
                SelectCommand="SELECT * FROM testRoles WHERE (RoleId = @cMake)"
                DeleteCommand="DELETE FROM testRoles WHERE RoleId = @RoleId">

                <SelectParameters>
                    <asp:Parameter Name="cMake" DefaultValue="0" Type="int32" />
                </SelectParameters>
            </asp:SqlDataSource>

</div>           


 <cc1:ModalPopupExtender id="ModalPopupExtender1" runat="server"
    cancelcontrolid="ClosePopup" okcontrolid="ClosePopup"
    targetcontrolid="hidenSelectedDoc" popupcontrolid="THolder"
    popupdraghandlecontrolid="PopupHeader" drag="true" BehaviorID="MPE" Y="0" backgroundcssclass="ModalPopupBG">       
    </cc1:ModalPopupExtender>
     <asp:Button runat="server" 
        ID="hidenSelectedDoc" 
        style="display:none"/> 



</form>
Другие вопросы по тегам