When a user on my site exits out of a ModalPopupExtender, I can't get the focus to go to the first textbox in the page as it does in other places, with this code:
ListView lsv = Helpers.FindChild(Page, "lsvNewInvite") as ListView; if (lsv != null) { TextBox txt = Helpers.FindChild(lsv, "txtFriendFirstName") as TextBox; if (txt != null) txt.Focus(); } public static Control FindChild(Control start, string id) { System.Web.UI.Control foundControl; if (start != null) { foundControl = start.FindControl(id); if (foundControl != null) return foundControl; foreach (Control c in start.Controls) { foundControl = FindChild(c, id); if (foundControl != null) return foundControl; } } return null; }
I suspect that it has to do with a postback issue but I can't figure it out. Here is the code that I believe is the most applicable:
<asp:UpdatePanel ID="udpModalSuccess" runat="server"><ContentTemplate><%--success popup items--%><div style="display: none;"><asp:Button ID="btnDummy" UseSubmitBehavior="true" OnClientClick="ShowModalPopup" OnClick="btnDummy_Click" runat="server" /><%--Dummy Button added to assign the target controlid of PopupExtender--%><asp:Button ID="btnDummyButton" UseSubmitBehavior="true" runat="server" Text="DummyButton" Style="display: none;" /></div><asp:Panel ID="pnlNewInviteSuccess" class="modalPopup" runat="server"><div><asp:Label ID="lblNewInviteSuccess" runat="server" /></div><br /><div><asp:Button ID="btnNewInviteReturn" Text="OK" CssClass="button" runat="server" /></div></asp:Panel><%--Here I have changed the TargetControlID property--%><act:ModalPopupExtender ID="mpeNewInviteSuccess" TargetControlID="btnDummyButton" CancelControlID="btnNewInviteReturn" BackgroundCssClass="modalBackground" PopupControlID="pnlNewInviteSuccess" DropShadow="true" BehaviorID="mpe" runat="server"></act:ModalPopupExtender></ContentTemplate></asp:UpdatePanel> protected void lsvNewInvite_ItemCommand(Object sender, ListViewCommandEventArgs e) { if (e.CommandName == "Insert") { //place cursor in txtFirstName var lsv = Helpers.FindChild(this, "lsvNewInvite") as ListView; TextBox txt = Helpers.FindChild(lsv, "txtFriendFirstName") as TextBox; if (txt != null) txt.Focus(); //set up parameter values ListViewItem item = e.Item as ListViewItem; var userInfoList = UserInfo.UserInfoGetByUserID(UserID); UserInformation = userInfoList.FirstOrDefault(); var user = UserInformation.UserID; string firstName = (item.FindControl("txtFriendFirstName") as TextBox).Text.ToString(); string lastName = (item.FindControl("txtFriendLastName") as TextBox).Text.ToString(); string eMail = (item.FindControl("txtFriendEmail") as TextBox).Text.ToString(); try { //code to be inserted into DB srcNewInvite.InsertParameters["FriendID"].DefaultValue = "0"; srcNewInvite.InsertParameters["User"].DefaultValue = user.ToString(); srcNewInvite.InsertParameters["FirstName"].DefaultValue = firstName; srcNewInvite.InsertParameters["LastName"].DefaultValue = lastName; srcNewInvite.InsertParameters["Email"].DefaultValue = eMail; srcNewInvite.InsertParameters["Date"].DefaultValue = DateTime.Now.ToString(); } catch (Exception ex) { throw ex; } finally { EmailNewInvitee(firstName, lastName, eMail); //concatenate these values and make them as a comma-separated string string concatenatedValue = firstName + "," + lastName + "," + eMail; btnDummy.CommandArgument = concatenatedValue; //show success message by programatically "clicking" hidden button //trigger the button click event btnDummy_Click(this.btnDummy, e); pnlMain.Visible = false; pnlNewInviteSuccess.Visible = true; } } } protected void btnDummy_Click(Object sender, EventArgs e) { //mpeNewInviteSuccess.Show(); //create object of button from sender Button button = sender as Button; //get command argument string cmdArgument = button.CommandArgument; //split command argument based on comma separator and convert to a list List<string> lstPassedValues = new List<string>(cmdArgument.Split(',')); ListView lsv = Helpers.FindChild(Page, "lsvNewInvite") as ListView; //create successful message from list string SuccessMsg = "Success! Your invitation was sent to:<br><b> " + lstPassedValues[0] + " " + lstPassedValues[1] + " (" + lstPassedValues[2] + "</b>)"; lblNewInviteSuccess.Text = SuccessMsg; //assign TargetControl id of ModalPopUpExtender to btnDummy mpeNewInviteSuccess.TargetControlID = "btnDummy"; //show ModalPopup Extender mpeNewInviteSuccess.Show(); }
This are two things I tried at the end of the btnDummy_Click event, but they didn't work:
Response.Redirect(Request.Url.AbsoluteUri); ListView lsv = Helpers.FindChild(Page, "lsvNewInvite") as ListView; if (lsv != null) { TextBox txt = Helpers.FindChild(lsv, "txtFriendFirstName") as TextBox; if (txt != null) txt.Focus(); }