2013-11-21 2 views
1

Работа с asp.net, у меня есть gridview внутри панели обновления, заполненной динамическими пользовательскими элементами управления (загружается в placeholder1 на rowdataound). Пользователь вводит текст в текстовое поле пользовательского элемента управления, нажимает кнопку «подтвердить» пользовательского элемента управления, модальное всплывающее окно отображает сообщение «подтверждение» со значением пользователя в текстовом поле. Событие нажатия кнопки пользовательского элемента управления обрабатывает значения параметров модального всплывающего расширителя и показывает всплывающее окно.Невозможно установить управляющие значения ModalPopupExtender с помощью UpdatePanel в ASP.NET

Это работает, как ожидалось, когда сетка не находится на панели обновления/панель обновления не используется. Когда я помещаю gridview на панель обновления, когда появляется модальное всплывающее окно, оно не отображает значения, которые были установлены в событии нажатия кнопки (я подтвердил, что событие щелчка запускается, элементы управления находятся, и значения установив в этом случае). Я должен что-то упустить ... и/или не совсем понимаю архитектуру панели обновления и то, как она ведет себя с динамическими элементами управления.

[код ниже упрощена]

GridView

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 
<asp:GridView ID="gvSaleData" runat="server" DataKeyNames="ItemNumber" 
AutoGenerateColumns="False" ShowFooter="True" /> 
<Columns> 
    <asp:TemplateField ShowHeader="false"> 
    <ItemTemplate> 
     <div> 
     <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>  
     </div> 
    </ItemTemplate> 
    </asp:TemplateField>  
    </Columns> 
    </asp:GridView> 
</ContentTemplate> 
</asp:UpdatePanel> 

MODAL POPUP

<asp:modalpopupextender id="mp1" runat="server" 
     cancelcontrolid="btnCancel" 
     targetcontrolid="btnShow" popupcontrolid="pnlShow" 
     popupdraghandlecontrolid="PopupHeader" drag="true" 
     backgroundcssclass="ModalPopupBG"> 
</asp:modalpopupextender> 
<asp:panel id="pnlShow" style="display:none" runat="server"> 
<div class="popupcontainer"> 
     <div>Your Value: <asp:Label ID="lblUserValue" runat="server" Text=""></asp:Label></div> 
<asp:Button ID="btnConfirm" runat="server" Text="Confirm" 
      onclick="btnConfirm_Click" CssClass="submit"/> 
<asp:Button ID="btnCancel" runat="server" Text="Return" 
      onclick="btnCancel_Click" CssClass="submit"/> 
</div> 
</asp:panel> 

CONTROL USER CODE ПОЗАДИ

protected void btnShowConfirmation_Click(object sender, EventArgs e) 
{ 
AjaxControlToolkit.ModalPopupExtender mp =(AjaxControlToolkit.ModalPopupExtender)Page.FindControl("mp1"); 
Label lblUserValue = (Label)mp.FindControl("lblUserValue"); 
lblUserValue.Text = textbox1.Text; 
mp.Show(); 
} 
+0

Я полагаю, я мог бы переложить большую часть этой стороны клиента. Я делаю некоторую проверку ввода данных из базы данных и используя этот метод для разных пользовательских элементов управления, выполняющих различные функции на странице, но выполнение этой клиентской стороны приведет к более быстрым нагрузкам и лучшему ux. – user2175152

ответ

1

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

Ответ на вопрос: поставить панель ModalPopupExtender "pnlShow" внутри панели обновления с добавлением AsycPostBackTrigger, чей идентификатор является btnShowConfirmation.

Если динамическое добавление btnShowConfirmation должно быть динамически добавлено в UpdatePanel.

В прилагаемом примере показаны две кнопки, которые поднимают модальное всплывающее окно. Ссылка триггера на btnX добавляется в коде aspx, в качестве примера динамически добавляется триггер btnY.

[Aspx код]

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="TestModalPopup.aspx.vb" 
    Inherits="USSGAinfo.TestModalPopup" %> 

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style type="text/css"> 
    .modalPopupX 
    { 
     background-color: #DDFFDD; 
     border-width: 2px; 
     border-style: solid; 
     border-color: black; 
     padding-top: 20px; 
     padding-left: 10px; 
     width: 400px; 
     height: 150px; 
    } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
    </ajaxToolkit:ToolkitScriptManager> 
    <!-- Hidden Field --> 
    <asp:UpdatePanel runat="server" ID="up1" ChildrenAsTriggers="false" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="OkButton" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:Button runat="server" ID="btnX" Text="X" /> 
     <asp:Button runat="server" ID="btnY" Text="Y" /><br /> 
     <asp:Label runat="server">Confirm:</asp:Label><asp:Label runat="server" ID="lblResult"></asp:Label> 
    </ContentTemplate> 
    </asp:UpdatePanel> 

    <asp:HiddenField ID="hidForModal" runat="server" /> 
    <ajaxToolkit:ModalPopupExtender ID="MPE" runat="server" TargetControlID="hidForModal" 
    PopupControlID="pnlTarget" BackgroundCssClass="modalBackground" PopupDragHandleControlID="pnlTarget"> 
    </ajaxToolkit:ModalPopupExtender> 

    <asp:Panel ID="pnlTarget" Style="display: none" runat="server"> 
    <asp:UpdatePanel runat="server" ID="up2" ChildrenAsTriggers="false" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="btnX" /> 
    <%-- <asp:AsyncPostBackTrigger ControlID="btnY" />--%> 
    </Triggers> 
    <ContentTemplate> <asp:Panel runat="server" ID="Panel1" HorizontalAlign="Center" DefaultButton="OkButton" 
     CssClass="modalPopupX"> 
     <asp:Table runat="server"> 
     <asp:TableRow runat="server"> 
      <asp:TableCell runat="server" ID="tcResult" HorizontalAlign="Center" Width="400px" Height="20px" BackColor="AntiqueWhite">Button Clicked: 
      <asp:label runat="server" ID="lblMPEResult"></asp:label> 
      </asp:TableCell> 
     </asp:TableRow> 
     </asp:Table> 
     <br /> 
     <asp:Button ID="OkButton" runat="server" Text="Yes" />&nbsp; 
     <asp:Button ID="CancelButton" runat="server" Text="No" /> 
    </asp:Panel> 
    </ContentTemplate> 
    </asp:UpdatePanel> 
    </asp:Panel> 
    </form> 
</body> 
</html> 

[Код позади]

Public Class TestModalPopup 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    ' Add btnY as trigger for ModalPopoup update panel 
    Dim trigger As New AsyncPostBackTrigger 
    trigger.ControlID = "btnY" 
    trigger.EventName = "Click" 
    up2.Triggers.Add(trigger) 
    End Sub 

    Private Sub btnX_Click(sender As Object, e As System.EventArgs) Handles btnX.Click 
    ' Put button dependent info into ModalPopup and then show 
    lblMPEResult.Text = "XXX" 
    MPE.Show() 
    End Sub 

    Private Sub btnY_Click(sender As Object, e As System.EventArgs) Handles btnY.Click 
    ' Put button dependent info into ModalPopup and then show 
    lblMPEResult.Text = "YYY" 
    MPE.Show() 
    End Sub 

    Private Sub OkButton_Click(sender As Object, e As System.EventArgs) Handles OkButton.Click 
    ' Show that OK button was pressed and also information derived from the ModalPopup 
    lblResult.Text = lblMPEResult.Text 
    MPE.Hide() 
    End Sub 

    Private Sub CancelButton_Click(sender As Object, e As System.EventArgs) Handles CancelButton.Click 
    MPE.Hide() 
    End Sub 
End Class 
Смежные вопросы