7

这两种情况是否有区别:

(1) 从普通子级访问母版页上的属性

(2) 从嵌套母版页访问母版页上的属性

我试图从这样的内容页面访问母版页中的文本框:

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
defaultTextbox.Text = a.Text; // defaultTextBox is a textbox control inside default.aspx

它可以工作,但是当我在嵌套母版页上应用相同的方法时:

TextBox a;
a = (TextBox)Master.FindControl("ayyash"); // Master is declared in MasterType directive
myTextBox.Text = a.Text; // myTextBox is a textbox control inside child.master

这不起作用,我错过了什么吗?我在regulare page_load处理程序中调用这两个代码......

我还注意到我无法从后面的代码中设置嵌套母版页内的文本框值,我肯定缺少一些东西,它是什么?为了阐明这个问题,这里有一个例子:

嵌套母版页:

<%@ Master Language="C#" MasterPageFile="MasterPage.master" AutoEventWireup="false" CodeFile="MasterPage2.master.cs" Inherits="MasterPage2" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<asp:textbox id="tx2" runat="server" text="this is two"></asp:textbox>
<asp:contentplaceholder id="newstuff" runat="server"></asp:contentplaceholder>
</asp:Content>

后面的代码:

Response.Wrote(tx2.Text);

我什么都没有,为什么我错过了什么?请注意,我还尝试了递归查找控件:

String str = ((TextBox)((Content)FindControl("Content2")).FindControl("tx2")).Text;

依然没有

4

4 回答 4

5
ContentPlaceHolder cp = (ContentPlaceHolder)this.Master.Master.FindControl("ContentPlaceHolder1");
  //base content place holder id

Label objLabel3 = (Label)cp.FindControl("lblNested");
  //lblNested is id in nested master page
于 2012-06-15T06:16:51.040 回答
4

我在这里读了几件事: http ://www.odetocode.com/Articles/450.aspx 发现中间的嵌套页面从不调用 Page_Load!相反,它会触发一个加载事件,您可以捕获该事件以设置任何字段,因此答案是:在嵌套页面上执行以下操作:

protected override void OnLoad(EventArgs e)
    {
        myTextBox.Text = "anything";
        base.OnLoad(e);
    }
于 2009-05-18T05:32:53.257 回答
2

这应该没有任何问题,所以其他东西一定是错的。我只是在一个简单的测试项目中尝试过,在这两种情况下都可以在母版页上找到控件。

如果您在嵌套母版页中引用正确的母版页,我会再次检查。您还可以检查Master嵌套母版页内属性的运行时类型。它应该是您的母版页的类型。

编辑:我认为问题在于从嵌套母版页中找到根母版页中的控件,这应该可以正常工作。要在嵌套母版页的内容占位符内查找控件,请查看以下论坛帖子

于 2009-05-17T11:59:18.197 回答
0

您可以使用以下指令从内容页面对母版页和嵌套页面中的内容进行绝对控制:

<%@ MasterType VirtualPath="your_master.master" %>
<%@ Reference VirtualPath="~/your_master.master" %>

请参阅 K. Scott Allen 在Ode To Code中的出色文章

于 2015-05-06T04:10:35.483 回答