2009-08-13 5 views
2

고객이 지불 정보를 적용 할 수있는 ModalPopupExtender가 있습니다. 그것은 위대한 일을 해왔습니다. 그런 다음 고객은 ModalPopup에서 만기일을 확인해야합니다. 부모 컨트롤로 인해 총계를 가져 와서 ModalPopup 컨트롤에 전달하는 것은 큰 문제가 아닙니다. 쉬운 방법이없는 것처럼 보입니다. 여기 ModalPopupExtender에 데이터 전달

는 사용자가 메이크업 지불 링크에게 ModalPopup를 클릭 할 때이 코드

<asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" OnClick="lnkMakePayment_Click" > 

<asp:Label ID="lblMakePayment" runat="server" Text="Make Payment"/></asp:LinkButton> 

<asp:Button ID="btnDummy" style="display: none;" runat="server" 
      OnClick="btnDummy_Click" /> 

<ajaxToolkit:ModalPopupExtender ID="mdlPopupPayment" runat="server" 
TargetControlID="btnDummy" PopupControlID="pnlMakePayment" 
CancelControlID="popUpCancel" DropShadow="true" BackgroundCssClass="modalBackground"> 
</ajaxToolkit:ModalPopupExtender> 

<asp:Panel ID="pnlMakePayment" runat="server" Style="display: none;" 
      SkinID="PopUpPanel" class="ContentBoxColor" Width="400px" Height="170px"> 
    <MP1:MakePaymentPopup ID="MakePayment" runat="server" /> 
    <div style="text-align: right; width: 100%; margin-top: 5px;"> 
     <asp:Button ID="popUpCancel" runat="server" Text="Cancel" Width="0px" /> 
    </div> 
</asp:Panel> 

지금 여기에 UpdatePanel에 싸여 마음에 숨김 그래서

protected void btnDummy_Click(object sender, EventArgs e) { } 

protected void lnkMakePayment_Click(object sender, EventArgs e) 
{ 
    mdlPopupPayment.Show(); 
} 

입니다 유지, 내 HTML 코드 잘 작동합니다. 또한 부모 컨트롤이 사용자가 팝업에서 채우는 결제 정보 및 모든 관련 결제 세부 정보를 적용하기 위해 수신 대기하는 이벤트를 발생시킵니다. 다시이 모든 것이 잘 작동합니다.

은 다음 인해 ModalPopup에 총을 보내는에서 내 첫 번째 시도가 될 때 :

protected void lnkMakePayment_Click(object sender, EventArgs e) 
{ 
    // MakePayment is the actual ModalPopup control and total due is a public property 
    MakePayment.TotalDue = txtTotalDue.Text 
    mdlPopupPayment.Show(); 
} 

이 문제는 내가 ModalPopup을 보여주기 위해 링크를 클릭 할 때 PageLoad 이벤트 내가 가진 너무 발생하지 않는다는 것입니다 ModalPopup 내부의 레이블에 내 속성을 할당 할 방법이 없습니다. 나는 세션 객체를 사용하려했지만 동일한 문제가있었습니다. 고객 ID를 전달할 수 없어 데이터베이스를 이동할 수도 없습니다. 아이디어가 있으십니까? 저는 Javascript의 초보자이며 서버 측 soultion을 인식하지만이 시점에서 나는 무엇이든 시도하려고합니다.

MakePayment 사용자 정의 컨트롤에는 3 개의 ASP 텍스트 상자가 있습니다. 하나는 사용자가 지불 금액을 입력하고, 다른 하나는 지불 유형을, 다른 하나는 수표 번호와 같은 노트를 입력하는 것입니다. 또한 컨트롤에는 적용 및 취소 버튼이 있습니다. 상위 컨트롤은 기본 ascx 페이지로 ModalPopupExtender와 모든 HTML 코드가 포함 된 데이터 입력 화면입니다.

답변

0

제가 잘못한 것을 깨닫게되면, 제가 생각해 낸 해결책은 꽤 솔직합니다. Arnold Matusz가 나에게 빛을 보인 블로그 항목 이었기 때문에 Arnold Matusz에게 감사해야합니다. http://blog.dreamlabsolutions.com/post/2009/01/10/ModalPopupExtender-to-show-a-MessageBox.aspx

대신 ModalPopup 엔젠더가 방금 일부 HTML을 표시하는 사용자 정의 컨트롤을 호출하도록하는 대신. ModalPopupExtender 인 사용자 컨트롤을 만들었습니다. 이렇게하면 데이터를 호출하고 전달할 수 있습니다.

내 MakePayment 사용자 컨트롤의 HTML은 내 기본 폼에 공개 방법을

public void MakePayment(string szAmountDue) 
{ 
    lblTotalDueValue.Text = szAmountDue; 
    mdlPopupPayment.Show(); 
} 

이 뒤에

<asp:Button ID="btnDummy" style="display: none;" runat="server" 
    OnClick="btnDummy_Click" /> 
<ajaxToolkit:ModalPopupExtender ID="mdlPopupPayment" runat="server" 
      TargetControlID="btnDummy" PopupControlID="pnlMakePayment" 
      CancelControlID="popUpCancel" DropShadow="true" 
      BackgroundCssClass="modalBackground"> 
</ajaxToolkit:ModalPopupExtender> 
<asp:Panel ID="pnlMakePayment" runat="server" Style="display: none;" 
    SkinID="PopUpPanel" class="ContentBoxColor" Width="400px" Height="170px"> 
<div class="contentbox"> 
    <div class="contentboxHeader1"> 
     <asp:Label ID="lblPopupTitle" Width="350px" runat="server" Text=""></asp:Label> 
    </div> 
    <div class="contentbox"> 
     <div style="text-align: left"> 
      <asp:Label ID="lblTotalDue" Width="100px" runat="server" Text=""> 
      </asp:Label> 
      <asp:Label ID="lblTotalDueValue" Width="100px" runat="server"> 
      </asp:Label> 
     </div> 
     <div style="text-align: left"> 
      <asp:Label ID="lblPayment" Width="100px" runat="server" Text=""></asp:Label> 
      <asp:TextBox ID="txtPayment" Width="100px" runat="server"></asp:TextBox> 
      <ajaxToolkit:FilteredTextBoxExtender ID="ftbePayment" runat="server" 
       TargetControlID="txtPayment" FilterType="Custom, Numbers" 
       ValidChars="."> </ajaxToolkit:FilteredTextBoxExtender> 
     </div> 
     <div style="text-align: left"> 
      <asp:Label ID="lblPaymentRefNo" Width="100px" runat="server" Text=""> 
      </asp:Label> 
      <asp:TextBox ID="txtPaymentRefNo" Width="100px" runat="server"> 
      </asp:TextBox> 
     </div> 
     <div style="text-align: left"> 
     <asp:Label ID="lblPaymentType" Width="100px" runat="server" Text=""></asp:Label> 
      <asp:TextBox ID="txtPaymentType" Width="250px" runat="server"></asp:TextBox> 
     </div> 
    </div> 
    <div class="contentbox" style="text-align=right"> 
     <asp:Button ID="btnApplyPayment" runat="server" Text="" 
      OnClick="btnApplyPayment_Click" /> 
     <asp:Button ID="btnCancel" runat="server" Text="" OnClick="btnCancel_Click" /> 
    </div> 
</div> 
<div style="text-align: right; width: 100%; margin-top: 5px;"> 
    <asp:Button ID="popUpCancel" runat="server" Text="Cancel" Width="0px" /> 
</div> 
</asp:Panel> 

처럼 그리고 코드에서 보이는 내가 링크라는 만들기 지불을 가지고

<asp:LinkButton ID="lnkMakePayment" runat="server" Visible="true" 
     OnClick="lnkMakePayment_Click" > 
    <asp:Label ID="lblMakePayment" runat="server" Text=""/> 
</asp:LinkButton> 

결제하기 링크를 클릭하면 코드가 MakePayment 컨트롤을 호출합니다. 내가 표시하고자하는 모든 데이터를 노래하십시오.

protected void lnkMakePayment_Click(object sender, EventArgs e) 
{ 
    MakePayment.MakePayment(lblTotalValue.Text.ToString()); 
} 
0

좀 더 자세한 정보가 필요하다고 생각합니다. MakePayment 사용자 정의 컨트롤에 포함 된 마크 업/코드 숨김을 표시하거나 설명 할 수 있습니까? 그리고 당신은 "부모 통제"에 대해 이야기 할 때 어떤 요소를 언급하고 있습니까? MakePayment, pnlMakePayment, pnlDummy?

+0

미안? –

5

데이터를 모달 팝업으로 전달할 필요가 없습니다. 다른 위치에서 다시 사용해야하는 경우에만 사용자 정의 컨트롤을 만들 것입니다. 여러 위치에서 다시 사용할 필요가없는 경우 사용자 정의 컨트롤이 필요하지 않습니다. 대신 이렇게 :

문자열을 표시하고 확인 및 취소 단추가 있지만 팝업 전에 문자열 값을 설정해야하는 팝업이 필요하다고 가정하십시오.

  1. 패널 만들기.
  2. 1 단계의 Panel 내에 UpdatePanel을 배치하십시오.
  3. Button과 ModalPopupExtender를 UpdatePanel에 배치하십시오.
  4. UpdatePanel 안에 Ok 및 Cancel 단추를 팝업 익스텐더 아래에 배치하십시오. 이는 다음과 같습니다

    <asp:Panel ID="Panel1" runat="server" CssClass="popup" Width="320px" Style="display:none"> 
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
         <ContentTemplate> 
          <asp:Button ID="Button1" runat="server" Style="display:none" /> 
          <cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" 
           TargetControlID="Button1" 
           PopupControlID="Panel1" 
           CancelControlID="CancelButton"> 
          </cc1:ModalPopupExtender> 
          <asp:Label ID="Label1" runat="server" /> 
          <asp:Button ID="OkButton" runat="server" Text="Ok" CausesValidation="true" OnClick="OkButton_OnClick" />&nbsp; 
          <asp:Button ID="CancelButton" runat="server" Text="Cancel" CausesValidation="false" /> 
         </ContentTemplate> 
        </asp:UpdatePanel> 
    </asp:Panel> 
    
  5. 다음, 페이지에하는 버튼이 같은 텍스트 상자 배치

    : 당신의 페이지 뒤에 코드에서 지금

    <asp:TextBox ID="MyTextBox" runat="server" /> 
    <asp:Button ID="MyButton" runat="server" Text="Popup" OnClick="MyButton_OnClick" /> 
    
  6. 을위한 핸들러를 배치 MyButton :

    protected void MyButton_OnClick(object sender, EventArgs e) 
    { 
        Label1.Text = MyTextBox.Text; 
        UpdatePanel1.Update(); 
        ModalPopupExtender1.Show(); 
    } 
    
0
<asp:Panel runat="server" ID="pPopupQuoteSearch" CssClass="modalPopupQuote" Style="display: none"> 
    <asp:LinkButton ID="lbClose" Text="Close" runat="server" /> 
    <div id="dQuoteContainer" runat="server"> 
    </div> 
</asp:Panel> 
<asp:Button ID="Button5" runat="server" Style="display: none" /> 
<cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Button5" 
     PopupControlID="pPopupQuoteSearch" BackgroundCssClass="modalBackground" OkControlID="lbClose"> 
</cc1:ModalPopupExtender> 
내가 질문 어떻게 당신의 대답은 올바른 이유에 대한 설명에 대한
+1

에 좀 더 많은 정보를 추가 불분명 경우

C# 코드

protected void btnQuteSearch_Click(object sender, EventArgs e) { pPopupQuoteSearch.Style.Remove("display"); pPopupQuoteSearch.Style.Add("display", "inline"); dQuoteContainer.InnerHtml = "some HTML code"; ModalPopupExtender1.Show(); }