2009-08-13 131 views
2

我有一個ModalPopupExtender,它允許客戶應用付款信息。它一直在努力工作。然後客戶要求查看ModalPopup上的總價。這似乎沒有什麼大不了,只是從父控制中獲取總和並將其傳遞到ModalPopup控件中。似乎有沒有簡單的方法做到這一點。將數據傳遞到ModalPopupExtender

這裏是我的HTML代碼,請記住這個代碼被包裝在一個UpdatePanel的現在,這裏

<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> 

的代碼隱藏

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

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

所以,當用戶點擊付款鏈接的ModalPopup工作正常。它甚至會觸發父控件監聽的事件,以應用付款信息和用戶在彈出窗口中填寫的所有相關付款細節。再次,這一切工作正常。

我在總髮送由於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的新手,並且傾向於服務器端靈魂,但在這一點上,我願意嘗試任何東西。

MakePayment用戶控件包含3個asp文本框。一個用於輸入支付金額,另一個用於支付類型,第三個用於支票號碼等註釋。在控制器上還有一個應用和取消按鈕。父控件是一個基本的ascx頁面,它是一個數據輸入屏幕,其中包含ModalPopupExtender和所有用於激活它的html代碼。

回答

0

一旦我意識到我做錯了,我想出的解決方案非常簡單。 我必須感謝Arnold Matusz,因爲這是他的博客文章向我展示了光明。 http://blog.dreamlabsolutions.com/post/2009/01/10/ModalPopupExtender-to-show-a-MessageBox.aspx

而不是讓ModalPopup entender調用剛剛顯示一些html的用戶控件。我做了一個用戶控件,它是ModalPopupExtender。這樣我可以調用它並傳入一些數據。

我MakePayment用戶控件的HTML看起來像

<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> 

而且在後面的代碼我有一個公共的方法

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

在我的主要形式,我有一個鏈接稱爲進行付款

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

當點擊付款鏈接後面的代碼調用MakePayment控件pas在我希望展示的任何數據中唱歌。

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

我認爲你需要提供更多信息。你可以向我們展示或描述MakePayment用戶控件中包含的標記/代碼隱藏嗎?當你談論「父母控制」時,你指的是哪一個元素? MakePayment,pnlMakePayment,pnlDummy?

+0

對不起,如果我不清楚我加了一些的問題 – 2009-08-14 12:47:15

5

不需要創建用戶控件來將數據傳遞到模式彈出窗口。如果我需要在不同位置重用它,我只會創建一個用戶控件。如果您不需要在多個位置重複使用它,則不需要用戶控制。而是這樣做:

假設你需要一個彈出窗口來顯示一個字符串並且有OK和Cancel按鈕,但是你需要在彈出之前設置字符串值。

  1. 創建一個面板。
  2. 在步驟1的面板內放置一個UpdatePanel。
  3. 在UpdatePanel中放置一個Button和ModalPopupExtender。
  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> 

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(); 
} 
+1

怎麼樣,爲什麼你的答案是正確的解釋更多信息? – 2012-04-26 07:36:23