有没有办法告诉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
受到保护。
答案 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";
}
}
答案 1 :(得分:2)
通过将其包含在ASPX页面上,创建对母版页的强类型引用。
<%@ MasterType virtualpath="~/Masters/Master1.master" %>
在您的母版页上,创建一个属性。这将使控件可以从其他类中获得..
public Button btnLanguageENMaster
{
get {return btnLanguageEN;}
private set;
}
然后从常规页面代码后面你可以做到这一点......
Master.btnLanguageENMaster.Text = "Hello, world!"