在设计器生成的文件中使控件公开

时间:2014-04-04 21:21:50

标签: asp.net

有没有办法告诉ASP.NET .designer.cs代码生成器创建公共控件而不是受保护?

.master.designer.cs档案:

/// <summary>
/// btnLanguageEN control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.LinkButton btnLanguageEN;

.master档案:

<asp:LinkButton runat="server" ID="btnLanguageEN" OnClick="btnLanguageEN_Click" Text="ENG" />

为什么需要它?我试图从子页面访问母版页控件:

.aspx档案:

<%@ MasterType TypeName="www.MainMaster" %>

.aspx.cs档案:

Master.btnLanguageEN.Text = "123";

我收到一条错误消息,指出btnLanguageEN受到保护。

2 个答案:

答案 0 :(得分:3)

不是修改设计器生成的代码,而是使用Master方法通过Page的FindControl属性引用控件。

您需要将以下指令添加到子页面的顶部(如果它尚未存在)以引用母版页:

<%@ MasterType virtualpath="~/Masters/Master1.master" %>

然后,在您的子页面代码中,您可以执行以下操作。

void Page_Load()
{   
   // Gets a reference to a LinkButton on the master mage.
   // a ContentPlaceHolder
   LinkButton mpLinkButton = (LinkButton) Master.FindControl("btnLanguageEN");
   if(mpLinkButton != null)
   {
       mpLinkButton.Text = "123 - Labelled by Child Page";
   }
}

参考:http://msdn.microsoft.com/en-us/library/xxwa0ff0.aspx

答案 1 :(得分:2)

通过将其包含在ASPX页面上,创建对母版页的强类型引用。

<%@ MasterType virtualpath="~/Masters/Master1.master" %>

在您的母版页上,创建一个属性。这将使控件可以从其他类中获得..

public Button btnLanguageENMaster
{
    get {return btnLanguageEN;}
    private set;
}

然后从常规页面代码后面你可以做到这一点......

Master.btnLanguageENMaster.Text = "Hello, world!"