2009-08-13 46 views
2

私は、顧客が支払い情報を適用できるようにするModalPopupExtenderを持っています。それは素晴らしい仕事をしています。その後、顧客はModalPopupで合計金額を確認するよう求めました。これは親コントロールからの合計を受け取り、それをModalPopupコントロールに渡すだけの大したことではありませんでした。これには簡単な方法はないようです。ここでModalPopupExtenderにデータを渡す

は、ユーザーがメイク支払いリンクModalPopupをクリックしたときに、このコードは、今ここでの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(); 
} 

だからである、私の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の初心者であり、サーバー側の魂を当てていますが、この時点で何か試してみます。

MakePaymentユーザーコントロールには、3つのaspテキストボックスが含まれています。ユーザーが支払金額を入力するためのもの、支払タイプのためのもの、およびチェック・ナンバーのようなメモ用のもの。また、コントロールには、適用およびキャンセルボタンがあります。親コントロールは基本的なascxページで、ModalPopupExtenderとそれをアクティブにするすべてのhtmlコードを含むデータ入力画面です。

答えて

0

私が間違ってやっていることが分かったら、私が思いついた解決策はかなり簡単でした。 Arnold Matuszに感謝しなければならないのは、光を見せてくれたブログエントリだったからです。 http://blog.dreamlabsolutions.com/post/2009/01/10/ModalPopupExtender-to-show-a-MessageBox.aspx

代わりに、ModalPopupエンテンダが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コントロールパス表示したいデータを歌います。

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

私はもう少し情報を提供する必要があると思います。 MakePaymentユーザーコントロールに含まれているマークアップ/コードビハインドを表示したり、説明したりできますか?あなたが "親コントロール"について言及するとき、あなたはどの要素を指していますか? MakePayment、pnlMakePayment、pnlDummy?

+0

申し訳ありませんが私は不明であった場合、私はどのようにあなたの答えは正しいものである理由の説明についての質問 –

5

データをモーダルポップアップに渡すためにユーザーコントロールを作成する必要はありません。私は別の場所でそれを再利用する必要がある場合、私はユーザーコントロールを作成します。複数の場所で再利用する必要がない場合は、ユーザーコントロールは必要ありません。代わりに、次のようにしてください:

文字列を表示し、[OK]と[キャンセル]ボタンがあるポップアップが必要だが、ポップアップする前に文字列値を設定する必要があるとします。

  1. パネルを作成します。
  2. 手順1のパネル内にUpdatePanelを配置します。
  3. ボタンと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> 

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

にいくつかのより多くの情報を追加しましたか? –

関連する問題