Updatepanel не работает на странице содержимого
Здравствуйте эксперты,
У меня есть выпадающий список, в котором я добавляю checkboxlist в code behind.
когда я проверяю любой элемент из списка флажков, выпадающий список автоматически скрывается. Тот же код работает правильно и без главной страницы.
Мне нужна ваша срочная помощь.
главная страница:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <asp:ContentPlaceHolder id="head" runat="server"> </asp:ContentPlaceHolder> </head> <body> <form id="form1" runat="server"> <div><h1>Hello World</h1></div> <div> <asp:ContentPlaceHolder id="MainContent" runat="server"> </asp:ContentPlaceHolder> </div> </form> </body> </html>
Страницы Содержимого.aspx-файл:
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> <link href="bootstrap.min.css" rel="stylesheet" type="text/css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server"> <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <div class="dropdown"> <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"> Dropdown Example <span class="caret"></span> </button> <asp:Panel class="dropdown-menu" ID="pnlList" runat="server" Style="overflow-x: hidden; overflow-y: scroll; height: 225px" OnInit="pnlList_Init"></asp:Panel> </div> </ContentTemplate> </asp:UpdatePanel> </div> </asp:Content>
Страницы Содержимого.в CS:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { Panel pnl; string[] lst_main = { "A", "B", "C", "D", "E"}; string[] lst_child = { "1", "2", "3", "4", "5" }; protected void Page_Load(object sender, EventArgs e) { } protected void pnlList_Init(object sender, EventArgs e) { #region Generate Checkbox //if (IsPostBack) //{ for (int i = 0; i < lst_main.Count(); i++) { pnl = new Panel(); pnl.CssClass = "pnl-mrgn"; CheckBox chkmain = new CheckBox(); chkmain.ID = lst_main[i].ToString(); //chkmain.CheckedChanged += new System.EventHandler(chkmain_CheckedChanged); chkmain.Text = lst_main[i].ToString(); chkmain.CssClass = "margin-right"; chkmain.Enabled = false; //chkmain.AutoPostBack = true; //chkmain.CheckedChanged += (obj, args) => //{ // if (chkmain.Checked.Equals(true)) // { // txtvalue.Text += chkmain.Text; // } //}; pnl.Controls.Add(chkmain); CheckBoxList chkchild = new CheckBoxList(); chkchild.ID = "chkList_" + lst_main[i].ToString(); chkchild.RepeatDirection = RepeatDirection.Horizontal; chkchild.AutoPostBack = true; chkchild.SelectedIndexChanged += new System.EventHandler(chkchild_SelectedIndexChanged); //chkchild.SelectedIndexChanged += (obj, args) => //{ // if (chkchild.SelectedItem != null) // txtvalue.Text += chkchild.SelectedItem.Value; //}; for (int j = 0; j < lst_child.Count(); j++) { System.Web.UI.WebControls.ListItem li = new System.Web.UI.WebControls.ListItem(); li.Text = lst_child[j].ToString(); chkchild.Items.Add(li); pnl.Controls.Add(chkchild); } pnlList.Controls.Add(pnl); //pnlList.ContentTemplateContainer.Controls.Add(pnl); } //} #endregion } protected void chkchild_SelectedIndexChanged(object sender, EventArgs e) { string result = Request.Form["__EVENTTARGET"]; string[] checkedBox = result.Split('$'); int index = int.Parse(checkedBox[checkedBox.Length - 1]); //int thisIndex = 0; CheckBoxList objCheckBoxList = sender as CheckBoxList; int thisIndex = objCheckBoxList.SelectedIndex; string lsSelectdVal = ""; if (index >= 0 && index < 4 && objCheckBoxList.Items[index].Selected) { for (int i = index; i <= 4; i++) { objCheckBoxList.Items[i].Selected = true; lsSelectdVal += checkedBox[2].Split('_')[1] + ":" + (i + 1) + ","; } //CheckBox chk = FindControl(checkedBox[2].Split('_')[1]) as CheckBox; CheckBox chk = (CheckBox)this.FindControl("ctl00").FindControl("MainContent").FindControl(checkedBox[2].Split('_')[1]); chk.Checked = true; } if (index == 4 && objCheckBoxList.Items[index].Selected) { CheckBox chk = (CheckBox)this.FindControl("ctl00").FindControl("MainContent").FindControl(checkedBox[2].Split('_')[1]); chk.Checked = true; //else //{ // CheckBox chk = (CheckBox)this.FindControl("pnlList").FindControl(checkedBox[0].Split('_')[1]); // chk.Checked = false; //} } if (thisIndex == -1) { CheckBox chk = (CheckBox)this.FindControl("ctl00").FindControl("MainContent").FindControl(checkedBox[2].Split('_')[1]); chk.Checked = false; } //((UpdatePanel)this.FindControl("ctl00").FindControl("MainContent").FindControl("UpdatePanel1")).Update(); //objCheckBoxList.Items[0].Selected = true; //ListItem objListItem; //string selectedItems = string.Empty; //foreach (ListItem listitem in objCheckBoxList.Items) //{ // if (listitem.Selected) // { // thisIndex = objCheckBoxList.Items.IndexOf(listitem); // } //} //Label1.Text = lsSelectdVal; } }
Что я уже пробовал:
Я попробовал с приведенным выше образцом кода, который работает правильно без главной страницы.
но фактический код должен быть с главной страницей.
Gerry Schmitz
Я думал, что "содержание" - это для "формы", а не для мастера.
KManishS
что же теперь делать, чтобы добиться этого?
F-ES Sitecore
Пройдитесь по коду и посмотрите, как он ведет себя по-разному на главной странице. ie - это строка, вызывающая исключение, которого она не делала раньше, это вызов FindControl, возвращающий null, когда он возвращал объект раньше, и так далее.