5

1つのプロパティ名イベントタイプのマスターページがあります。ここで、コンテンツページからこのプロパティを設定すると、そのプロパティ値を別のコンテンツページで使用できるようになります。

これはasp.netで可能ですか?はいの場合は、私を助けてください。

そして、はい、私のコンテンツページはすでにマスターではない別のページを継承しています。

4

7 に答える 7

3

このプロパティがマスターページに追加したカスタムプロパティである場合は、それを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にあります。

于 2013-03-15T12:01:52.140 に答える
2

ページが異なるリクエストからのものである場合、マスタープロパティは機能しません。マスターページは静的ではなく、リクエストごとに異なるものがあります。つまり、値を取得しようとすると、値を設定したインスタンスが失われます。ディクショナリは、Sessionリクエスト間で保持するユーザーコンテンツを配置する場所です。

于 2013-03-15T22:02:05.670 に答える
2

マスターページにプロパティを追加します。

public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }

次に、ページのマスターを取得し、マスタークラスタイプにキャストします。

((MyMaster)Page.Master).lblBannerText = "banner text";
于 2015-03-03T15:30:57.140 に答える
0

あなた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!";
        }
    }
于 2013-03-15T11:55:22.150 に答える
0

あなたはこれを試すことができます

マスターページにプロパティを作成し、コンテンツページからアクセスします。

マスターページ:

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 };
   }
 }
于 2013-03-15T11:56:55.850 に答える
0

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;
    }
}
于 2014-04-21T08:38:32.693 に答える
0

私も同様の問題を抱えていました。これが私がしたことです:

//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;
于 2018-03-30T13:20:14.050 に答える