3

子 aspx ページに設定されている masterpage から hiddenfield 値にアクセスしようとしていますが、masterpage codebehind 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;
}

編集:最初にテストしたときにこの間違いを犯したため、 LabelonMasterPageが の外にあることを確認してください。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;
   }

asp.netのマスターページからコンテンツページコントロールにアクセスする方法に関する同様の投稿がありますso

于 2013-03-07T15:26:18.467 に答える
0

マスター ページのコンテンツ ページでコントロールにアクセスできるのはなぜだと思いますか? AMasterPageは複数のページに使用されます。特定のページにハードリンクする必要があるのはなぜですか。これがないと機能しません。がマスターの操作に不可欠な場合は、HiddenFieldそこで宣言する必要があります。

子ページごとに、マスター ページに表示する必要がある異なる rpt タイトルがあります。どうすればこれを達成できますか?

その後、コンテンツ ページはそのマスターにアクセスしてテキストを設定できますが、その逆はできません。

マスターでパブリック プロパティを提供できます。たとえば、次のようになります。

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

このアプローチは、マスターをその子の 1 つ (または複数) とリンクしていますが、コンテンツ ページが別のマスター タイプを使用する場合でも「機能」します。また、誰かがプロパティを削除または変更すると、コンパイラ エラーが通知されます。

ただし、コンテンツがレポート タイプを格納する場所、またはマスターが表示する場所は実装の詳細であり、将来、何も壊すことなく変更できます。

于 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 に答える