Проблема Заполнение ajaxToolkit: modalpopupextender Controls - PullRequest
0 голосов
/ 05 декабря 2018

Я создаю страницу, которая имеет следующие элементы управления: один modalpopupextender и два раздела Accordion.Верхний аккордеон заполняется при загрузке страницы.Он содержит несколько списков CheckBoxList, которые я использую для фильтрации данных в Accordion # 2.

if (!IsPostBack)
    {
        DataSet ds = jdh.GetDataSetFromDB("Select GeoLocationID, GeoLocationName from geolocation order by GeoLocationName");
        Locationschklst.DataSource = ds;
        Locationschklst.DataTextField = "GeoLocationName";
        Locationschklst.DataValueField = "GeoLocationID";
        Locationschklst.DataBind();


        DataSet ds1 = jdh.GetDataSetFromDB("Select PostingTypeID, PostingTypeName from PostingType where PostingTypeID >= 3 and PostingTypeID <= 10 order by PostingTypeID");
        OpportunityChklst.DataSource = ds1;
        OpportunityChklst.DataTextField = "PostingTypeName";
        OpportunityChklst.DataValueField = "PostingTypeID";
        OpportunityChklst.DataBind();

        DataSet ds2 = jdh.GetDataSetFromDB("Select SalaryGradeID, SalaryGrade from SalaryGrade order by SalaryGradeID");
        SalaryGradeChklst.DataSource = ds2;
        SalaryGradeChklst.DataTextField = "SalaryGrade";
        SalaryGradeChklst.DataValueField = "SalaryGradeID";
        SalaryGradeChklst.DataBind();

        DataSet ds3 = jdh.GetDataSetFromDB("Select LOBMFOID, LOBMFOAbb from LOBMFO order by LOBMFOAbb");
        DisciplineChklst.DataSource = ds3;
        DisciplineChklst.DataTextField = "LOBMFOAbb";
        DisciplineChklst.DataValueField = "LOBMFOID";
        DisciplineChklst.DataBind();

        VirtualChklst.Items.Add("No");
        VirtualChklst.Items.Add("Yes");

        //LoadOpportunities("EXEC GetOpenPostings");

    }

Второй аккордеон динамически заполняется при загрузке страницы.Это происходит независимо от того, является ли загрузка обратной передачей или нет.Я сделал это, потому что, если я поместил его в раздел! Postback, он не будет отображаться при выборе фильтров в первом аккордеоне.Он создает панели динамически на основе результатов возвращенного набора данных.Каждая созданная панель имеет кнопку.

protected void LoadOpportunities(string query)
{
    DataSet openOpportunities_ds = jdh.GetDataSetFromDB(query);
    int i = 0;  // I will use this for creating unique accordion panes in each iteration of the loop
    Label lblTitle;     // This i will use as a child control to handle Header Text in the accordion pane
    Label lblContent;    // This i will use as a child control to handle Content Text in the accordion pane
    UpdatePanel updpnl;
    AjaxControlToolkit.AccordionPane pn; // I have declared an accordion pane but not yet initialized
    foreach (DataRow dr in openOpportunities_ds.Tables[0].Rows)
    {
        // Begin your table
        StringBuilder sb = new StringBuilder("<table>");
        sb.AppendFormat("<tr><td style=\"width:150px;\"></td><td style=\"width:750px;\"></td></tr>");
        sb.AppendFormat("<tr><td style=\"background-color:Yellow; font-weight:bold; text-align:right;border:solid\">{0}</td><td style=\"font-size:18px\">{1}</td></tr>", "Location:", dr["GeoLocationName"].ToString());
        sb.AppendFormat("<tr><td style=\"background-color:Yellow; font-weight:bold; text-align:right;border:solid\">{0}</td><td style=\"font-size:18px\">{1}</td></tr>", "Salary Grade:", dr["SalaryGrade"].ToString());

        lblTitle = new Label();
        lblContent = new Label();
        updpnl = new UpdatePanel();

        lblTitle.Text = "ID: <b>" + dr["PostingID"].ToString() + "</b> Title: <b>" + dr["PostingTitle"].ToString() + "</b> Discipline: <b>" + dr["LOBMFOAbb"].ToString() +
            "</b> Virtual: <b>" + dr["VirtualPosition"].ToString() + "</b> Opportunity Type: <b>" + dr["PostingTypeName"].ToString() + "</b>";

        Button ApplyButton = new Button();
        ApplyButton.ID = "Apply_" + dr["PostingID"].ToString();
        ApplyButton.Text = "Apply";
        ApplyButton.Click += new EventHandler(this.ApplyOpportunity);
        updpnl.ContentTemplateContainer.Controls.Add(ApplyButton);

        lblContent.Text = sb.ToString();
        pn = new AjaxControlToolkit.AccordionPane();
        pn.ID = "Pane" +  dr["PostingID"].ToString();
        pn.HeaderContainer.Controls.Add(lblTitle);
        pn.ContentContainer.Controls.Add(lblContent);
        pn.ContentContainer.Controls.Add(updpnl);
        //Accordion1.Panes.Remove(pn);
        Accordion1.Panes.Add(pn);
        ++i;
    }     
}

До этого момента все работало нормально.Проблема, с которой я столкнулся, заключается в следующем: когда пользователь нажимает кнопку на панели, предполагается, что modalpopupextender заполняется данными с панели, на которой находилась кнопка.Я могу получить необходимые данные в коде, но когда всплывающее окно отображает, что оно не заполняется.

protected void modalpopupdisplay(string OpID)
{
    int i = OpID.IndexOf("_");
    string opportunityid = OpID.Substring(i+1,OpID.Length - (i+1));
    string title = jdh.GetSingleValueFromDB("Select PostingTitle from postings where PostingID = '" + opportunityid + "'");
    title = "Apply to " + title;
   TheHeader.Text = title;
    ModalPopupExtender1.Show();
    //Page.ClientScript.RegisterClientScriptBlock(GetType(), "scrollTop", "function scrollTop(){ window.scrollTo(0,0);} window.onload=scrollTop;", true);
}

В приведенном выше коде я могу успешно построить строку "title" и назначить ее"TheHeader.Text".Однако, когда отображается всплывающее окно, TheHeader.Text пусто.

<asp:LinkButton ID="lnkDummy" runat="server"></asp:LinkButton> 
 <ajaxToolkit:modalpopupextender id="ModalPopupExtender1" runat="server" 
   okcontrolid="btnOkay" 
   targetcontrolid="lnkDummy" 
   popupcontrolid="Panel1" 
   BehaviorID="mpe"
   backgroundcssclass="ModalPopupBG">
</ajaxToolkit:modalpopupextender>

<asp:panel id="Panel1" style="display: none" runat="server" CssClass="modalPopup">
        <div class="PopupHeader" id="PopupHeader">
            <asp:Literal runat="server" Id="TheHeader"></asp:Literal>
        </div>
        <div class="PopupBody">                
            <input id="btnOkay" type="button" value="OK" />
        </div>  
</asp:panel>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...