2012-01-27 4 views
1

私はこれがS.Oの他の多くの質問と似ていることを知っています。しかし、そのような状況には当てはまりませんし、問題を解決するものもありません。問題は私が必要に応じて他のコントロールを渡すモーダルポップアップコントロールを1つ持っていることです。ユーザーがUIのボタンをクリックすると、1つのコンテンツセットでそのモーダルを得ることができます。そして、別のボタンをクリックすると、別のコンテンツを取得します。モーダルポップアップに追加されたコンテンツからイベントを発生させようとするまでは、すべてうまくいきました。私はこの問題を解決するためにすべてを試したと言うことは全く正確ではありませんが、私はかなり試みました。私はこれを行うことができないと確信するようになっている、または私はいくつかの設定が間違っている。更新パネルのModalpopupエクステンダー。発砲しないイベントを制御します。

これは、これは私がその背景には、モーダルポップアップに追加していたユーザーコントロールのコードです更新パネル

<input id="dummy" type="button" style="display: none" runat="server" /> 
<asp:ModalPopupExtender CancelControlID="Close" runat="server" ID="mpeThePopup" TargetControlID="dummy" PopupControlID="pnlModalPopUpPanel" BackgroundCssClass="modalBackground" PopupDragHandleControlID="Title" /> 
<asp:Panel ID="pnlModalPopUpPanel" runat="server" CssClass="modalPopup" Width="400px" Height="600px"> 
    <asp:UpdatePanel ID="udpInnerUpdatePanel" runat="Server"> 
     <ContentTemplate> 
      <table id="ContentTableTag" runat="server" cellpadding="0" cellspacing="0" style="width: 100%; 
       height: 100%;"> 
       <tr> 
        <td id="Title" runat="server" style="background-color: rgb(79,82,90); text-align: left; 
         height: 28px; width: 90%; color: White;" nowrap="nowrap"> 
         <h4 style="margin: 0px 0px 0px 5px;"> 
          <asp:Label ID="LblSectionTitle" runat="server" Text="Modal"></asp:Label> 
         </h4> 
        </td> 
        <td id="Close" runat="server" style="background-color: rgb(79,82,90); text-align: right; 
         height: 28px; width: 10%" nowrap="nowrap"> 
         <asp:ImageButton ID="ibClose" runat="server" Style="margin-right: 5px;" ImageUrl="~/WLImages/MLS/button_close.png" 
          ToolTip="Close" /> 
        </td> 
       </tr> 
       <tr> 
        <td id="MainContentHolder" colspan="2" align="left" style="top: 0px; bottom: 100%; 
         vertical-align: top; width: 100%; height: 100%" /> 
       </tr> 
      </table> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Panel> 

ため、このコードでは、2つのイベントのトリガ、カレンダーの変更の一つですその日付、およびチェックボックス項目がオンになっているときのチェックボックス項目がチェックされます。

<table id="mainContent" runat="server" visible="false" width="350" height="300"> 
    <tr> 
     <td> 
      <asp:label ForeColor="White" runat="server" Text="Exam Date:" /> 
     </td> 
     <td> 
      <asp:TextBox ID="txtDate" runat="server" Width="127" ForeColor="Black" 
       readonly="true" ontextchanged="txtDate_TextChanged"/> 
      <asp:CalendarExtender ID="CalendarExtender" runat="server" 
       PopupButtonID="ibtnCalendar" OnClientDateSelectionChanged="checkDate" 
       TargetControlID="txtDate" onload="LoadCalendar" /> 
     </td> 
     <td> 
      <asp:ImageButton ID="ibtnCalendar" ImageUrl="../imgs/btn_calendar.png" Width="20px" runat="server" /> 
     </td> 
    </tr> 
    <tr> 
     <td style="vertical-align: top; padding-top:5px"> 
      <asp:label ForeColor="White" runat="server" Text="Study Days:" /> 
     </td> 
     <td colspan="2" style="vertical-align: top; padding-top:5px"> 
      <asp:CheckBoxList ID="WeekCheckBox" runat="server" ForeColor="White" 
       onselectedindexchanged="WeekCheckBox_SelectedIndexChanged"> 
       <asp:ListItem Text="Monday" Value="1" /> 
       <asp:ListItem Text="Tuesday" Value="2" /> 
       <asp:ListItem Text="Wednesday" Value="3" /> 
       <asp:ListItem Text="Thursday" Value="4" /> 
       <asp:ListItem Text="Friday" Value="5" /> 
       <asp:ListItem Text="Saturday" Value="6" /> 
       <asp:ListItem Text="Sunday" Value="7" /> 
      </asp:CheckBoxList> 
     </td> 
    </tr> 
    <tr> 
     <td> 
      <asp:label ForeColor="White" runat="server" Text="Study hours per day:" /> 
     </td> 
     <td colspan="2"> 
      <asp:TextBox ForeColor="Black" ID="tbStudyHours" runat="server" Width="127px" ReadOnly="true" /> 
     </td> 
    </tr> 
</table> 

最後に、私はこのコントロールをモーダルに追加します。

private void GenerateCalendarPopup(ExamDateSelector eds) 
    { 
     pnlModalPopUpPanel.BackColor = GUI.Instance.GUIColorElement(GUIElements.color_main); 
     LblSectionTitle.Text = "Exam Date"; 
     pnlModalPopUpPanel.Height = eds.ControlHeight + 40; 
     pnlModalPopUpPanel.Width = eds.ControlWidth + 25; 
     eds.ShowControl = true; 
     MainContentHolder.Controls.Add(eds); 
    } 

ありがとうございました。

答えて

0

私は自分のために、ウェブ用のWindows製品のフローとスタイルをコピーすることによって作成した状況に対処する "正しい"方法ではないかもしれませんが、私は問題を解決する方法を見つけました。モーダルポップアップで提示された場合、このコントロールから発射されないイベント。しかし、ラウンドアバウトの方法で。 最初に私はjavascriptで関数を書いています。関数は、コントロールのイベントに入れた数学の大部分を行います。本質的には、今までの学習時間量と、ユーザが学習日として選択した曜日を考慮した特定の日付を計算します。私は、保存している情報をウェブメソッドを使ってデータベースに渡します。

function calculateStudyTime() { 
    //do some math 
    … 
    PageMethods.SaveModalExamDateChangesToDB(datesString, selectedDate); 
} 

コードビハインドで計算をトリガーする各コントロールにスクリプトを添付します。私の場合は、曜日を表すチェックボックスの1つがトグルされるまで、調査時間を再計算したいと思います。そこで、スクリプトをListItemコントロールに添付しました。 ListItemコントロールは実際にデザイナーからアクセスできるonclick属性を持たないため、この方法で追加できます。

protected void LoadCalendar(object sender, EventArgs e) 
{ 

    … 
    foreach (ListItem item in WeekCheckBox.Items) 
    { 
     item.Attributes.Add("onclick", "calculateStudyTime()"); 
    } 
     … 
} 

は最後にモーダルポップアップのすべてが、私はそのベースページへの静的参照を作成すると呼ばれている、そこからベースページ、および飾られた機能にはJavaScriptファイルから呼び出されます。静的なWebメソッドから基本ページ(この場合は私のコンテキスト)のメンバーにアクセスできるように、自分自身への静的参照が必要です。

Static Dashboard thisPage; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    … 
    thisref = this; 
    … 
} 

[WebMethod] 
[ScriptMethod] 
public static void SaveModalExamDateChangesToDB(string days, string date) 
{ 
    thisPage.UserSession.UserCourse.ExamDate = DateTime.Parse(date); 
    thisPage.UserSession.UserCourse.StudyDays = days; 
    thisPage.UserSession.UserCourse.Save(); 
} 

私はそれが理想的ではないと言いましたが、動作します。

2

残りのコードが分からない場合。 Imはここで手足に行き、言う:Ofcourseは働かない:P。

ポストバックを実行するときは、page_initイベントのプレースホルダにあるコントロールを再作成する必要があります。これにより、ビューステートとコントロールハンドラが割り当てられる直前にコントロールコレクションが再作成されます。しかし、残りのコードを知らなくても、それはちょうど推測です。

言い換えれば、なぜこれをやっていますか?単に2つの異なるModalPopupExtendersを使用するのはなぜですか?この種のトリッキーに頼っていなくても、それ自体は獣です。

+0

モーダルポップアップを30個作成するのではなく、Windowsソフトウェアを模倣しようとするポップアップがあります。私はトリッキーに頼っているわけではありませんでしたが、同じ基本的なことを何度も何度も繰り返しコピーするのはばかげているようでした。それは私が何度も繰り返し貼り付けなければならないかもしれないと言われています。 – Siegeon

+0

もう一度、私は実際にこのようなことをしています(Web開発に関する経験はほとんどありません)。あなたに実際にあなたを示すための他のコードはありません... – Siegeon

+0

あなたのユースケースが非常に多くのポップアップを持つためのものであるか分かりません。しかし、私は大きな成功とポップアップとして別々のページを読み込むIFrameモードと組み合わせてFancyBoxを使用している。必要に応じて、ポップアップからメインページにコールバックすることもできます。それはあなたが今やろうとしていることよりずっと簡単かもしれません.... – Danthar

関連する問題