ModalPopupExtender - simulate OnShow event

Rate It (1)

Last post 03-09-2009 5:14 AM by mathuMP. 6 replies.

Sort Posts:

  • ModalPopupExtender - simulate OnShow event

    03-31-2008, 6:24 PM
    • Member
      105 point Member
    • TheSneak
    • Member since 04-19-2006, 9:23 PM
    • Posts 97

    I have a ModalPopupExtender which displays a DropDownList which is populated from the database.  When a user triggers the ModalPopupExtender, I would like to display within the ModalPopupExtender's Panel an animated "loading" image which would be replaced by the dropdownlist/data when it finishes loading.  If I could call DataBind() on the dropdownlist after the modalpopupextender displays, that would work, but I'm not certain how to accomplish this. 

  • Re: ModalPopupExtender - simulate OnShow event

    04-04-2008, 5:31 AM

    Hi TheSneak,

    You'd better add an UpdatePanel + UpdateProgress to the Panel which is tied to the ModalPopupExtender.  When the ModalPopupExtender is shown, A hidden button's click event is fired by javascript (document.getElementById("hidden Button's ClientID").click()). Then you can add datas on the Button's click event on server side.

    Best regards,

    Jonathan

    Jonathan Shen
    Microsoft Online Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
  • Re: ModalPopupExtender - simulate OnShow event

    04-04-2008, 9:33 AM
    • Member
      105 point Member
    • TheSneak
    • Member since 04-19-2006, 9:23 PM
    • Posts 97

     Thanks for your response Jonathan, but how do I know when the ModalPopupExtender is shown?

  • Re: ModalPopupExtender - simulate OnShow event

    04-04-2008, 7:57 PM
    • Member
      105 point Member
    • TheSneak
    • Member since 04-19-2006, 9:23 PM
    • Posts 97

     I have made some progress using the add_shown method of the ModalPopupExtender (these events seem elusive to me because they aren't obvious until you go into the code of the ModalPopupExtender - am I missing something?).  Below is a scaled down demo of what I have been able to accomplish.  It seems over-elaborate.  I read here that when a full postback is performed the ModalPopupExtender is hidden.  No full postbacks should be happening, so why do I still have to implement the workaround?  Also, why do I have to manually call mpeSelect.Hide()? 

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
    EnableEventValidation="false" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
    <!--

    function pageLoad(sender, e) {
    var mpe = $find('mpeBehavior');
    mpe.add_shown(mpe_Shown);
    mpe.add_hidden(mpe_Hidden);
    var shown = ($get('<%= HiddenField1.ClientID %>').value == "shown");
    if(shown)
    mpe.show();
    }

    function mpe_Shown(sender, e) {
    var hf = $get('<%= HiddenField1.ClientID %>');
    hf.value = "shown";

    var hf = $get('<%= HiddenField2.ClientID %>');
    if (hf.value != "loaded") {
    hf.value = "loaded";
    __doPostBack('<%= btnLoadData.ClientID %>','');
    }
    }

    function mpe_Hidden(sender, e) {
    var hf = $get('<%= HiddenField1.ClientID %>');
    hf.value = "hidden";
    }
    -->
    </script>

    </head>
    <body>
    <form id="form1" runat="server">
    <ajaxToolkit:ToolkitScriptManager ID="ScriptManager1" runat="server" />
    <div>
    <asp:HiddenField ID="HiddenField1" runat="server" Value="hidden" />
    <asp:HiddenField ID="HiddenField2" runat="server" Value="unloaded" />
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
    <ContentTemplate>
    <asp:Menu runat="server" ID="menu" Orientation="horizontal" OnMenuItemClick="menu_ItemClick" StaticDisplayLevels="1">
    <Items>
    <asp:MenuItem Text="Fruit" Selectable="false">
    <asp:MenuItem Text="Apple" />
    <asp:MenuItem Text="Banana" />
    <asp:MenuItem Text="Cherry" />
    </asp:MenuItem>
    <asp:MenuItem Text="Colors" Selectable="false">
    <asp:MenuItem Text="Red" />
    <asp:MenuItem Text="Yellow" />
    <asp:MenuItem Text="Blue" />
    </asp:MenuItem>
    </Items>
    </asp:Menu>
    <asp:Panel runat="server" ID="pnlSelection" CssClass="modalForeground" DefaultButton="btnSelectOK" BorderStyle="solid" BorderColor="#C0C0C0" BackColor="white">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <asp:Panel runat="server" ID="pnlLoading">
    Please wait while the data is loaded...
    </asp:Panel>
    <asp:Panel runat="server" ID="pnlSelect" Visible="false">
    Modal Popup
    <asp:Button runat="server" ID="btnLoadData" OnClick="btnLoadData_Click" Text="Load Data" Style="visibility: collapse;" />
    <br />
    </asp:Panel>
    <asp:Button runat="server" ID="btnSelectOK" Text="OK" OnClick="btnSelectOK_Click" Enabled="false" />
    <asp:Button runat="server" ID="btnSelectCancel" Text="Cancel" Enabled="false" />
    </ContentTemplate>
    </asp:UpdatePanel>
    </asp:Panel>
    <asp:Button runat="server" ID="Button1" Text="hide" Style="visibility: hidden" />
    <ajaxToolkit:ModalPopupExtender ID="mpeSelect" runat="server" PopupControlID="pnlSelection" CancelControlID="btnSelectCancel" TargetControlID="Button1" BehaviorID="mpeBehavior" DropShadow="true" />
    </ContentTemplate>
    </asp:UpdatePanel>
    </div>
    </form>
    </body>
    </html>
     
    public partial class _Default : System.Web.UI.Page
    {
    protected void btnLoadData_Click(object sender, EventArgs e)
    {
    //pretend to load data System.Threading.Thread.Sleep(2000); pnlLoading.Visible = false;
    pnlSelect.Visible = true;
    btnSelectOK.Enabled = true;
    btnSelectCancel.Enabled = true;
    }

    protected void btnSelectOK_Click(object sender, EventArgs e)
    {
    // here I would process the user's input mpeSelect.Hide(); } protected void menu_ItemClick(object sender, EventArgs e)
    {
    mpeSelect.Show();
    }

    }
     
  • Re: ModalPopupExtender - simulate OnShow event

    04-06-2008, 2:37 AM

    Hi TheSneak,

    Please set the UpdatePanel's UpdateMode to "Conditional".  For example,

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">

    Best regards,

    Jonathan

    Jonathan Shen
    Microsoft Online Community Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
  • Re: ModalPopupExtender - simulate OnShow event

    04-07-2008, 10:17 PM
    Answer
    • Member
      105 point Member
    • TheSneak
    • Member since 04-19-2006, 9:23 PM
    • Posts 97

     I made a couple of improvements: 

        To prevent a postback when clicking the menu item, use the NavigateUrl property to call javascript which displays the ModalPopupExtender;  Use style="display:none" on the popup panel to prevent strange flashing in this instance.  Now there is no need to handle the menu item click for the menu item that is associated with the ModalPopupExtender ("Apples" in this case).

     

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
    EnableEventValidation="false" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Untitled Page</title>

    <script type="text/javascript">
    <!--

    function pageLoad(sender, e) {
    var mpe = $find('mpeBehavior');
    mpe.add_shown(mpe_Shown);
    mpe.add_hidden(mpe_Hidden);
    var shown = ($get('<%= HiddenField1.ClientID %>').value == "shown");
    if(shown)
    mpe.show();
    }

    function mpe_Shown(sender, e) {
    var hf = $get('<%= HiddenField1.ClientID %>');
    hf.value = "shown";

    var hf = $get('<%= HiddenField2.ClientID %>');
    if (hf.value != "loaded") {
    hf.value = "loaded";
    __doPostBack('<%= btnLoadData.UniqueID %>','');
    }
    }

    function mpe_Hidden(sender, e) {
    var hf = $get('<%= HiddenField1.ClientID %>');
    hf.value = "hidden";
    }

    function showModalPopupExtender(behaviorId) {
    var mpe = $find(behaviorId);
    mpe.show();
    }
    -->
    </script>

    </head>
    <body>
    <form id="form1" runat="server">
    <ajaxToolkit:ToolkitScriptManager ID="ScriptManager1" runat="server" />
    <div>
    <asp:HiddenField ID="HiddenField1" runat="server" Value="hidden" />
    <asp:HiddenField ID="HiddenField2" runat="server" Value="unloaded" />
    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
    <ContentTemplate>
    <asp:Menu runat="server" ID="menu" Orientation="horizontal" OnMenuItemClick="menu_ItemClick" StaticDisplayLevels="1">
    <Items>
    <asp:MenuItem Text="Fruit" Selectable="false">
    <asp:MenuItem Text="Apple" NavigateUrl="javascript:showModalPopupExtender('mpeBehavior')" />
    <asp:MenuItem Text="Banana" />
    <asp:MenuItem Text="Cherry" />
    </asp:MenuItem>
    <asp:MenuItem Text="Colors" Selectable="false">
    <asp:MenuItem Text="Red" />
    <asp:MenuItem Text="Yellow" />
    <asp:MenuItem Text="Blue" />
    </asp:MenuItem>
    </Items>
    </asp:Menu>
    <asp:Panel runat="server" ID="pnlSelection" CssClass="modalForeground" DefaultButton="btnSelectOK" BorderStyle="solid" BorderColor="#C0C0C0" BackColor="white" style="display:none">
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
    <asp:Panel runat="server" ID="pnlLoading">
    Please wait while the data is loaded...
    </asp:Panel>
    <asp:Panel runat="server" ID="pnlSelect" Visible="false">
    Modal Popup
    <asp:Button runat="server" ID="btnLoadData" OnClick="btnLoadData_Click" Text="Load Data" Style="visibility: collapse;" />
    <br />
    </asp:Panel>
    <asp:Button runat="server" ID="btnSelectOK" Text="OK" OnClick="btnSelectOK_Click" Enabled="false" />
    <asp:Button runat="server" ID="btnSelectCancel" Text="Cancel" Enabled="false" />
    </ContentTemplate>
    </asp:UpdatePanel>
    </asp:Panel>
    <asp:Button runat="server" ID="Button1" Text="hide" Style="visibility: hidden" />
    <ajaxToolkit:ModalPopupExtender ID="mpeSelect" runat="server" PopupControlID="pnlSelection" CancelControlID="btnSelectCancel" TargetControlID="Button1" BehaviorID="mpeBehavior" DropShadow="true" />
    </ContentTemplate>
    </asp:UpdatePanel>
    </div>
    </form>
    </body>
    </html>
      

          

    public partial class _Default : System.Web.UI.Page
    {
    protected void btnLoadData_Click(object sender, EventArgs e)
    {
    //pretend to load data System.Threading.Thread.Sleep(2000); pnlLoading.Visible = false;
    pnlSelect.Visible = true;
    btnSelectOK.Enabled = true;
    btnSelectCancel.Enabled = true;
    }

    protected void btnSelectOK_Click(object sender, EventArgs e)
    {
    // here I would process the user's input mpeSelect.Hide(); } protected void menu_ItemClick(object sender, EventArgs e)
    {
    //this will no longer happen for the menu item associated with the mpe } }
     
  • Re: ModalPopupExtender - simulate OnShow event

    03-09-2009, 5:14 AM
    • Member
      2 point Member
    • mathuMP
    • Member since 03-09-2009, 5:02 AM
    • Posts 1

    Hi,

    I've an issue.

    When I click on the menuitem ,I want to open the modal popup (which's working now) & load a new page.Once the page get loaded I need to close the popup automatically.Dont need Ok & Cancel btns. How can I accomplish this?

    Something like this:

     protected void menu_ItemClick(object sender, MenuEventArgs e)
            {
               mpeSelect.Show();

             if (e.Item.Text == "Apple")
                {

                Response.Redirect("applepage.aspx");
                }

              mpeSelect.Hide();

    Please help...

     

Page 1 of 1 (7 items)