3

我正在尝试从在我的子 aspx 页面中设置的母版页访问隐藏字段值,但无法通过母版页代码隐藏 page_load 事件访问它。

子 aspx 页面:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
<telerik:RadStyleSheetManager ID="RadStyleSheetManager1" runat="server">
</telerik:RadStyleSheetManager>
<div class="center_content">
    <div style="text-align: left">
        <h2>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        </h2>
    </div>
    <div style="text-align: left">
        <uc1:Chart ID="Chart1" runat="server" />
    </div>
    &nbsp;</div>
    <asp:HiddenField ID="hid1" runat="server" Value="Satellite Availability % Report" />

母版页:

<asp:Label runat="server" ID="Label1" Style="text-align: right; font-size: xx-large; color: #808080"></asp:Label>

母版页代码背后:这是我想从子页面设置报告的文本值的地方。

protected void Page_Load(object sender, EventArgs e)
    {
        HiddenField hid1 = (HiddenField)MainContent.FindControl("MainContent_hid1");
    if (hid1 != null)
    {
        Label1.Text = hid1.Value;
    }        }
<input type="hidden" name="ctl00$MainContent$hdnRptTitle" id="MainContent_hdnRptTitle" value="Satellite Availability % Report" />

hdnRptTitle 变量没有智能感知。

我怎样才能让它工作?看起来很简单,但不知道为什么它不起作用......

4

4 回答 4

1

您可以将以下代码添加到您的MasterPage

HiddenField hid1 = (HiddenField)MainContent.FindControl("hid1");
if (hid1 != null)
{
     Label1.Text = hid1.Value;
}

编辑:确保您的Labelon 在MasterPage您的之外ContentPlaceHolder,因为我在第一次测试时犯了这个错误。

上面的代码应该按照提供的方式工作,使用您的控件名称,我不确定您为什么使用:

.FindControl("MainContent_hid1");

代替

.FindControl("hid1");

于 2013-03-07T15:24:39.067 回答
1

你可以这样使用。 您的母版页上
可以有多个。 在这种情况下使用包含您的 id我假设它是conterntPlaceHolder
hidden fieldContentPlaceHolder1

   HiddenField hid1 = (HiddenField)ContentPlaceHolder1.FindControl("hdnRptTitle");
   if (hid1 != null)
   {
     Label1.Text = hid1.Value;
   }

有关so
如何从 asp.net 中的母版页访问内容页面控件的类似帖子

于 2013-03-07T15:26:18.467 回答
0

为什么您认为您可以访问母版页的内容页中的控件?AMasterPage用于多个页面,为什么要将其与特定页面硬链接,没有它就无法工作。如果这HiddenField对于主服务器的操作至关重要,则应在此处声明。

对于每个子页面,有一个不同的 rpt 标题需要显示在母版页上。我怎样才能做到这一点?

然后内容页面可以访问它的主人来设置文本,反之亦然。

您可以在 master 中提供公共属性,例如:

public string ReportTitle
{
    get { return this.LblReportTitle.Text; }
    set { this.LblReportTitle.Text = value; }
}

并且在其中ContentPage,例如在它的Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    // assuming the type of your master is SiteMaster
    var master = this.Master as SiteMaster;
    if (master != null)
        master.ReportTitle = hdnRptTitle.Value;
}

这种方法仍然将主人与它的一个(或多个)孩子联系起来,但如果内容页面使用不同的主人类型,它仍然会“工作”。如果有人删除或更改属性,您也会收到编译器错误通知。

但是,内容存储报告类型的位置或主显示它的位置是实现细节,将来可以更改而不会破坏任何内容。

于 2013-03-07T15:25:42.300 回答
0

您可以引用母版页并获得这样的控件:

VB.Net:

Dim te As HiddenField
Dim val As String

te = Me.Page.Master.FindControl("hdnRptTitle")
val = te.Value

C#:

HiddenField te = default(HiddenField);
string val = null;

te = this.Page.Master.FindControl("hdnRptTitle");
val = te.Value;
于 2013-03-07T15:27:10.990 回答