从内容页面更新MasterPage控件

我有一个带有LabelUpdatePanel ,我想在我的MasterPage更新。 该活动正在我的内容页面上进行,以下是代码。

内容ASP.net代码:

     <asp:SqlDataSource ID="dsPopulateTaskName" runat="server" ConnectionString="" SelectCommand="QUERY"> 

C#代码隐藏:

 protected void ddlTaskName_onSelectIndexChanged(object sender, EventArgs e) { FilterMessages(); } public void FilterMessages() { DataTable msgTable = HttpContext.Current.Session["MessageTable"] as DataTable; string query = ""; Stack msgStack = new Stack(); if (ddlClient.SelectedIndex > 0) { query += "Client = '" + ddlClient.SelectedItem.Text + "' OR Client is NULL"; } if (ddlSite.SelectedIndex > 0 && query == "") { query += "Site = '" + ddlSite.SelectedItem.Text + "' OR Site is NULL"; } else if (ddlSite.SelectedIndex > 0) { query += " AND Site = '" + ddlSite.SelectedItem.Text + "' OR Site is NULL"; } if (ddlProvider.SelectedIndex > 0 && query == "") { query += "Provider = '" + ddlProvider.SelectedItem.Text + "' OR Provider is NULL"; } else if (ddlProvider.SelectedIndex > 0) { query += " AND Provider = '" + ddlProvider.SelectedItem.Text + "' OR Provider is NULL"; } UpdatePanel upMsg = (UpdatePanel)Master.FindControl("upMessage"); if (query != "") { DataRow[] result = msgTable.Select(query); System.Web.UI.WebControls.Label lblMsg = (System.Web.UI.WebControls.Label)Master.FindControl("lblMessage"); if (lblMsg != null) { lblMsg.Text = ""; } //lblMessage.Text = ""; foreach (DataRow row in result) { if (row["Active"].ToString() == "True") { string[] myStrings = new string[] { row["Created"].ToString().Split(' ')[0], string.IsNullOrEmpty(row["Client"].ToString()) ? null : row["Client"].ToString(), string.IsNullOrEmpty(row["Site"].ToString()) ? null : row["Site"].ToString(), row["Message"].ToString() }; string strResult = string.Join(" ", myStrings.Where(str => !string.IsNullOrEmpty(str))); msgStack.Push(strResult); } } foreach (string message in msgStack) { lblMsg.Text += message + "
"; //lblMessage.Text += message + "
"; } } else { PopulateMessageGV(); } if (upMsg != null) { upMsg.Update(); } //upMessage.Update(); } protected void PopulateMessageGV() { UpdatePanel upMsg = (UpdatePanel)Master.FindControl("upMessage"); System.Web.UI.WebControls.Label lblMsg = (System.Web.UI.WebControls.Label)Master.FindControl("lblMessage"); if (lblMsg != null) { lblMsg.Text = ""; } //lblMessage.Text = ""; DataTable dt = new DataTable(); dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Created", typeof(string)); dt.Columns.Add("Message", typeof(string)); dt.Columns.Add("Client", typeof(string)); dt.Columns.Add("Site", typeof(string)); dt.Columns.Add("Provider", typeof(string)); dt.Columns.Add("Active", typeof(bool)); dt.Columns.Add("CreatedBy", typeof(string)); using (var context = new ClientContext(hostWeb)) { Stack msgStack = new Stack(); var hostSite = context.Web; context.Load(hostSite, s => s.Title); context.ExecuteQuery(); ListCollection allLists = hostSite.Lists; Microsoft.SharePoint.Client.List messageList = allLists.GetByTitle("AdminMessage"); context.Load(messageList); context.ExecuteQuery(); try { var query = CamlQuery.CreateAllItemsQuery(); Microsoft.SharePoint.Client.ListItemCollection allItems = messageList.GetItems(query); context.Load(allItems); context.ExecuteQuery(); if (allItems.Count > 0) { foreach (Microsoft.SharePoint.Client.ListItem item in allItems) { DataRow dr = dt.NewRow(); dr["ID"] = item["ID"]; dr["Created"] = item["Created"]; dr["Message"] = item["Message"]; dr["Client"] = item["Client"]; dr["Site"] = item["Site"]; dr["Provider"] = item["Provider"]; dr["Active"] = item["Active"]; FieldUserValue test = (FieldUserValue)item["Author"]; dr["CreatedBy"] = test.LookupValue.ToString(); dt.Rows.Add(dr); if (item["Active"].ToString() == "True") { string[] myStrings = new string[] { item["Created"].ToString().Split(' ')[0], string.IsNullOrEmpty(dr["Client"].ToString()) ? null : item["Client"].ToString(), string.IsNullOrEmpty(dr["Site"].ToString()) ? null : item["Site"].ToString(), item["Message"].ToString() }; string result = string.Join(" ", myStrings.Where(str => !string.IsNullOrEmpty(str))); msgStack.Push(result); } } } HttpContext.Current.Session["MessageTable"] = dt; foreach (string message in msgStack) { lblMsg.Text += message + "
"; //lblMessage.Text += message + "
"; } if (upMsg != null) { upMsg.Update(); } //upMessage.Update(); } catch (Exception ex) { string error = ex.Message; } } }

MasterPage ASP.net代码:

      

当我更改DropDown选项时,虽然在那里放置断点,但主页中的UpdatePanel不会更新,表明它正被命中。

我该如何解决这个问题?

基本上,您希望从MasterPage公开Public Property 。 然后从ContentPage访问它。

主页

 <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.Master.cs" Inherits="DemoWebForm.Site" %>    
public partial class Site : System.Web.UI.MasterPage { public string MessageLabelText { get { return MessageLabel.Text; } set { MessageLabel.Text = value; } } }

内容页

 <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DemoWebForm._Default" %>       public partial class _Default : Page { protected void TaskNameDropDownList_SelectedIndexChanged( object sender, EventArgs e) { var master = Master as Site; if (master != null) { master.MessageLabelText = TaskNameDropDownList.SelectedValue; } } }