ASP.Net Web Forms - Как установить свойства MasterPage со страницы и пользовательские элементы управления - PullRequest
3 голосов
/ 05 августа 2011

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

Я нашел способ установить свойства главной страницы со страницы содержимого, добавив <%@ MasterType VirtualPath="/Site.master" %>, а затем используя **Master.property=value**, но не уверен, как получить доступ к пользовательскому элементу управления. Есть идеи?

Ответы [ 4 ]

2 голосов
/ 05 августа 2011

Вы можете создать форму базового класса, от которой унаследованы ваши главные страницы, включая свойства, которые вы хотите сохранить:

abstract public class MasterPageBase : System.Web.UI.MasterPage
{
    public string Prop1
    {
        get { return "Some Value"; }
    }
}

Из вашего UserControl вы можете получить доступ к свойствам следующим образом:

MasterPageBase masterPage = (MasterPageBase)this.Page.Master;
string strTest = masterPage.Prop1; // "Some Value"
1 голос
/ 22 февраля 2012

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

Вы хотите сослаться на свойство главной страницы из пользовательского элемента управления.

Во-первых, вашглавная страница будет иметь открытое свойство, например, так:

public string BodyClass
{
    set
    {
        this.masterBody.Attributes.Add("class", value);
    }
}

Теперь добавьте ссылку на главную страницу в ASCX-файле пользовательского элемента управления следующим образом:

<%@ Register Src="~/Source/MasterPages/Main.master" TagPrefix="MSTR" TagName="MasterPage" %>

Затем в код(C # в моем случае) у вас есть этот код:

Main masterPage = (Main)this.Page.Master;
masterPage.BodyClass = "container";

Без ссылки на главную страницу выше ваш пользовательский элемент управления не сможет найти класс главной страницы.

0 голосов
/ 15 мая 2013

Элементы управления определены в Master.designer.cs с модификатором доступа «protected».Вырежьте и вставьте его определение в code-behind (Master.cs) и измените модификатор доступа на «public».Затем вы можете получить доступ к элементу управления Master Page как в ответе Дерека Хунцикера:

MasterPageBase masterPage = (MasterPageBase)this.Page.Master;
string strTest = masterPage.Prop1; // "Some Value"
0 голосов
/ 05 августа 2011

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

Используя метод FindControl, для использования этого необходимо добавить теги сервера для пользовательского контроля и на странице контента, на странице .aspx добавить это:

<%@ Register Src="~/myControl.ascx" TagName="myControl" TagPrefix"uc" %>

затем в коде:

myControl = (myControl)this.Page.Master.FindControl("userControl_Id");

или вы можете создать публичную собственность на своей главной странице, которая возвращает ваш usercontrol:

public myControl UserControl { get; set; }

и в коде позади вашей контентной страницы вы можете получить доступ к этому пользовательскому элементу управления просто через свойство UserControl:

myControl ctrl = (myControl)this.Page.Master.UserControl;
...