Как получить доступ к управлению главной страницей страницы контента
У меня есть главная страница, содержащая ярлык для сообщений о статусе. Мне нужно установить текст состояния с разных страниц .aspx. Как это можно сделать на странице содержимого?
public partial class Site : System.Web.UI.MasterPage
{
public string StatusNachricht
{
get
{
return lblStatus.Text;
}
set
{
lblStatus.Text = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
Я пробовал это, но не смог сделать это:
public partial class DatenAendern : System.Web.UI.Page
{
var master = Master as Site;
protected void Page_Load(object sender, EventArgs e)
{
if (master != null)
{
master.setStatusLabel("");
}
}
protected void grdBenutzer_RowCommand(object sender, GridViewCommandEventArgs e)
{
try
{
//some code
if (master != null)
{
master.setStatusLabel("Passwort erfolgreich geändert.");
}
}
catch (Exception ex)
{
if (master != null)
{
master.setStatusLabel("Passwort konnte nicht geändert werden!");
}
}
}
}
}
Ответы
Ответ 1
В файле MasterPage.cs добавьте property
из Label
следующим образом:
public string ErrorMessage
{
get
{
return lblMessage.Text;
}
set
{
lblMessage.Text = value;
}
}
На странице aspx
, чуть ниже Директивы по страницам, добавьте следующее:
<%@ Page Title="" Language="C#" MasterPageFile="Master Path Name"..... %>
<%@ MasterType VirtualPath="Master Path Name" %> // Add this
И на странице codebehind(aspx.cs)
вы можете легко получить доступ к Label Property
и установить его text
по мере необходимости. Вот так:
this.Master.ErrorMessage = "Your Error Message here";
Ответ 2
На странице "Содержимое" вы можете получить доступ к метке и установить текст, например
Здесь lblStatus - это идентификатор ярлыка вашей главной страницы
Label lblMasterStatus = (Label)Master.FindControl("lblStatus");
lblMasterStatus.Text = "Meaasage from content page";
Ответ 3
Работает
Чтобы найти элементы главной страницы на странице "Ребенок"
Label lbl_UserName = this.Master.FindControl("lbl_UserName") as Label;
lbl_UserName.Text = txtUsr.Text;
Ответ 4
Вы не можете использовать var
в поле только для локальных переменных.
Но даже это не сработает:
Site master = Master as Site;
Потому что вы не можете использовать this
в поле, а Master as Site
- то же самое, что и this.Master as Site
. Поэтому просто инициализируйте поле из Page_Init
, когда страница полностью инициализирована, и вы можете использовать this
:
Site master = null;
protected void Page_Init(object sender, EventArgs e)
{
master = this.Master as Site;
}
Ответ 5
У меня есть вспомогательный метод для этого в моем классе System.Web.UI.Page
protected T FindControlFromMaster<T>(string name) where T : Control
{
MasterPage master = this.Master;
while (master != null)
{
T control = master.FindControl(name) as T;
if (control != null)
return control;
master = master.Master;
}
return null;
}
тогда вы можете получить доступ, используя приведенный ниже код.
Label lblStatus = FindControlFromMaster<Label>("lblStatus");
if(lblStatus!=null)
lblStatus.Text = "something";
Ответ 6
Это сложнее, если у вас есть вложенный MasterPage. Вам нужно сначала найти элемент управления содержимым, содержащий вложенный MasterPage, а затем найти элемент управления на своем вложенном MasterPage.
Критический бит: Мастер.Мастер.
Смотрите здесь: http://forums.asp.net/t/1059255.aspx?Nested+master+pages+and+Master+FindControl
Пример:
'Найдите элемент управления содержимым
Dim ct As ContentPlaceHolder = Me.Master.Master.FindControl( "cphMain" )
'теперь найдите элементы управления внутри этого содержимого
Dim lbtnSave As LinkButton = ct.FindControl( "lbtnSave" )
Ответ 7
If you are trying to access an <a> html element: this is an HTML Anchor...
My nav bar has items that are not list items (<li>) but rather html anchors (<a>)
Смотрите ниже: (Это мастер сайта)
<nav class="mdl-navigation">
<a class="mdl-navigation__link" href="" runat="server" id="liHome">Home</a>
<a class="mdl-navigation__link" href="" runat="server" id="liDashboard">Dashboard</a>
</nav>
Теперь в вашем коде для другой страницы, для моей, это страница входа...
На PageLoad() определите это:
HtmlAnchor lblMasterStatus = (HtmlAnchor)Master.FindControl("liHome");
lblMasterStatus.Visible =false;
HtmlAnchor lblMasterStatus1 = (HtmlAnchor)Master.FindControl("liDashboard");
lblMasterStatus1.Visible = false;
Теперь мы получили доступ к элементам управления мастеров сайта и сделали их невидимыми на странице входа.