1つのプロパティ名イベントタイプのマスターページがあります。ここで、コンテンツページからこのプロパティを設定すると、そのプロパティ値を別のコンテンツページで使用できるようになります。
これはasp.netで可能ですか?はいの場合は、私を助けてください。
そして、はい、私のコンテンツページはすでにマスターではない別のページを継承しています。
このプロパティがマスターページに追加したカスタムプロパティである場合は、それをMasterType
組み込んでいるページに宣言を追加する必要があります。
<%@ MasterType
virtualpath="~/Path/To/Your.master"
%>
これにより、Webサイトまたはアプリケーションはコンパイル時にマスターページの特定のタイプを知ることができ、コントロール内の他のプロパティと同じようにマスターページにアクセスできます。
Page.Master.MyCustomerProperty = someValue;
編集:補足として、このプロパティを次のコントロールに移動する際には、プロパティが変更されたことを示すカスタムイベントを作成(および発生)するのがおそらく最善でしょう。このようにして、プロパティが設定されるタイミングを気にすることなく、多くのコントロールがイベントをサブスクライブして「自己更新」することができます。
例:マスターページで、イベントを「グローバル」変数として定義できます。その後、あなたの財産でこのイベントを起こすことができます。
public event EventHandler myPropertyChanged;
public delegate void MyPropertyChanged(object sender, EventArgs e);
//...
public string MyProperty
{
get
{
return _myProperty;
}
set
{
_myProperty = value;
if (myPropertyChanged != null)
myPropertyChanged(this, new EventArgs());
}
}
次に、他のコントロールで、このイベントをサブスクライブして、いつ変更されるかを知ることができます。
protected void Page_Load(object sender, EventArgs e)
{
Page.Master.MyPropertyChanged += new EventHandler(MasterPropertyChanged);
}
protected void MasterPropertyChanged(object sender, EventArgs e)
//Rememeber you need the VirtualType in order for this event to be recognized
SomeLocalValue = Page.Master.MyProperty;
}
このプロセスの優れたステップバイステップのチュートリアルは、CodeProjectにあります。優れたc#カスタムイベントチュートリアルは、MSDNにあります。
ページが異なるリクエストからのものである場合、マスタープロパティは機能しません。マスターページは静的ではなく、リクエストごとに異なるものがあります。つまり、値を取得しようとすると、値を設定したインスタンスが失われます。ディクショナリは、Session
リクエスト間で保持するユーザーコンテンツを配置する場所です。
マスターページにプロパティを追加します。
public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
次に、ページのマスターを取得し、マスタークラスタイプにキャストします。
((MyMaster)Page.Master).lblBannerText = "banner text";
あなたMaster property
はあなたのページを使用してあなたの財産にアクセスすることができます
リンク: http: //msdn.microsoft.com/fr-fr/library/system.web.ui.page.master.aspx
サンプル
ContentPlaceHolder mpContentPlaceHolder;
TextBox mpTextBox;
mpContentPlaceHolder =
(ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
if(mpContentPlaceHolder != null)
{
mpTextBox =
(TextBox) mpContentPlaceHolder.FindControl("TextBox1");
if(mpTextBox != null)
{
mpTextBox.Text = "TextBox found!";
}
}
あなたはこれを試すことができます
マスターページにプロパティを作成し、コンテンツページからアクセスします。
マスターページ:
public partial class BasePage : System.Web.UI.MasterPage
{
private string[] _RequiredRoles = null;
public string[] RequiredRoles
{
get { return _RequiredRoles; }
set { _RequiredRoles = value; }
}
}
コンテンツページ:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load()
{
Master.RequiredRoles = new string[] { //set appropriate roles };
}
}
this.inコンテンツページのように、MasterPageのプロパティを取得または設定する簡単な方法は次のとおりです。
protected override void Render(HtmlTextWriter writer)
{
var master = this.Master as Site;
master.SiteName += "|网站首页";
base.Render(writer);
}
マスターページでプロパティを定義します
public partial class Site : System.Web.UI.MasterPage
{
public string MetaDescription { get; set; }
public string MetaKeywords { get; set; }
public string SiteName { get; set; }
public SiteSettings siteSettings { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
siteSettings = SettingsFactory<SiteSettings>.Get();
MetaDescription = siteSettings.SearchMetaDescription;
MetaKeywords = siteSettings.SearchMetaKeywords;
SiteName = siteSettings.SiteName;
}
}
私も同様の問題を抱えていました。これが私がしたことです:
//Id the form tag and place a runat server
<form id="form1" runat="server" >
//In C# Masterpage.cs - Expose the forms properties
public System.Web.UI.HtmlControls.HtmlForm Form1 {
get { return form1; }
set { form1 = value;
} }
//In C# Consuming page add this to pageLoad using UniqueId
((SiteMaster)Page.Master).Form1.DefaultButton = btnSearchUsersLink.UniqueID;