Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从内容页设置母版页的属性,并从asp.net中的另一个内容页获取该属性值_C#_Asp.net - Fatal编程技术网

C# 从内容页设置母版页的属性,并从asp.net中的另一个内容页获取该属性值

C# 从内容页设置母版页的属性,并从asp.net中的另一个内容页获取该属性值,c#,asp.net,C#,Asp.net,我有一个带有一个属性名事件类型的母版页。现在我想从一个内容页设置这个属性,然后该属性值应该可以用于另一个内容页 这在asp.net中是可能的吗?如果是,请帮助我 是的,我的内容页面已经继承了另一个非主控页面。您可以使用页面的主控属性,并访问您的属性 链接: 样品 ContentPlaceHolder mpContentPlaceHolder; TextBox mpTextBox; mpContentPlaceHolder = (ContentPlaceHolder)

我有一个带有一个属性名事件类型的母版页。现在我想从一个内容页设置这个属性,然后该属性值应该可以用于另一个内容页

这在asp.net中是可能的吗?如果是,请帮助我


是的,我的内容页面已经继承了另一个非主控页面。

您可以使用页面的
主控属性
,并访问您的属性

链接:

样品

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 string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
内容页:

 public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load()
  {
    Master.RequiredRoles = new string[] { //set appropriate roles };
   }
 }

如果此属性是添加到母版页的自定义属性,则必须向包含它的页面添加
MasterType
声明

<%@ MasterType 
    virtualpath="~/Path/To/Your.master" 
%>
编辑:作为旁注,在将此属性下放到下一个控件时,最好创建(并引发)一个指示属性已更改的自定义事件。通过这种方式,许多控件可以订阅事件并“自我更新”,而不必关心设置属性的时间

示例:在母版页中,可以将事件定义为“全局”变量。然后在您的财产中,您可以发起此事件

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;
}

有关此过程的详细教程,请访问。可以在上找到一个好的c#自定义事件教程。

如果您的页面来自不同的请求,则主属性将不起作用。母版页不是静态的,每个请求都有一个不同的母版页,这意味着当您试图检索它时,您设置值的实例就消失了。
会话
字典是您在请求之间保存用户内容的地方。

获取或设置母版页属性的简单方法,如下所示

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;
    }
}
公共部分课程网站:System.Web.UI.MasterPage
{
公共字符串元描述{get;set;}
公共字符串元关键字{get;set;}
公共字符串SiteName{get;set;}
公共站点设置站点设置{get;set;}
受保护的无效页面加载(对象发送方、事件参数e)
{
siteSettings=SettingsFactory.Get();
MetaDescription=siteSettings.SearchMetaDescription;
MetaKeywords=siteSettings.SearchMetaKeywords;
SiteName=siteSettings.SiteName;
}
}

将属性添加到母版页:

public partial class BasePage : System.Web.UI.MasterPage
{ 
   private string[] _RequiredRoles = null;

   public string[] RequiredRoles
   {
     get { return _RequiredRoles; }
     set { _RequiredRoles = value; }
   }
 }
public string lblBannerText { get { return lblBanner.Text; } set { lblBanner.Text = value; } }
然后,获取页面的母版并将其强制转换为母版类类型:

((MyMaster)Page.Master).lblBannerText = "banner text";

我也有类似的问题。以下是我所做的:

//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;
//标识表单标记并在服务器上放置runat
//在C#Masterpage.cs中-公开表单属性
public System.Web.UI.HtmlControls.HtmlForm Form1{
获取{return form1;}
设置{form1=值;
} }
//在C#消费页面中,使用UniqueId将其添加到pageLoad
((SiteMaster)Page.Master).Form1.DefaultButton=btnSearchUsersLink.UniqueID;

您需要将母版页强制转换为正确的类型,除非您使用和扩展方法您好朋友们,我可以从contentpage设置此属性。但是当我转到另一个内容页时,该值将变为null。我如何保留我最近设置的值。我可以从contentpage设置此属性。但是当我转到另一个内容页,该值将变为null。我如何保留该值。我最近设置的。@Darshan:请记住,它不一定为null。很可能是时间问题。在设置属性之前,您可能正试图从另一个控件访问该属性。请看我的编辑,以找到解决该特定问题的方法。自定义事件..我对此一无所知..你能用例子解释一下吗兄弟…那太好了@达珊:哦,很抱歉。我在回答另一个问题的同时,在VB中。我会改正的。@Darshan:我发布了一个编辑。您应该将其视为psuedo代码,因为我没有机会测试此部分,并且我正在从内存中进行RIFF。我可以从contentpage设置此属性。但是当我转到另一个内容页时,该值将变为null。如何保留该值。我最近设置了该值。您可以使用会话缓存来持久化,,ViewState不够