2009-08-06 86 views
3

我不斷收到這些請求,讓我做一個工具來做xyz,我們正在建立一個web app如何使用主控從asp:content頁面訪問masterpage上的用戶控件?

所以在第三個之後,我意識到將它們全部結合在一起並使用母版頁會更容易。

我有一個名爲MessageCenter的用戶控件,用於錯誤,成功和信息性消息,因此我將它放在母版頁上。

<%@ Master Language="VB" CodeFile="tfMasterPage.master.vb" Inherits="tfMasterPage" %> 

<%@ Register Src="MessageCenter/msgCenter.ascx" TagName="msgCenter" TagPrefix="uc1" %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title>INSERT TITLE HERE</title> 
    <link href="Stylesheets/EogTool.css" rel="stylesheet" type="text/css" /> 
    <link href="stylesheets/TF_Main_Styles.css" rel="stylesheet" type="text/css" /> 
    <link href="stylesheets/TF_Print_Styles.css" rel="stylesheet" type="text/css" media="print" /> 
</head> 
<body style="background-color: #eeeeee"> 
    <form id="form1" runat="server"> 
     <div class="page"> 
      <div class="headerArea"> 
       <div class="LogoImg"> 
        <img alt="Transparency Florida" src="images/TF_Logo.jpg" /></div> 
       <div class="SealImg"> 
        <img alt="Shining the Light on Florida's Budget" src="images/TF_Seal.jpg" /></div> 
      </div> 
      <div class="content"> 
       <h1> 
        FIS - EOG Table Maintenance</h1> 
      </div> 
      <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
      <div> 
       <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
        <ContentTemplate> 
         <div class="content"> 
          <div> 
           <uc1:msgCenter ID="MsgCenter1" runat="server" /> 
          </div> 
          <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 

...

通常,當msgcenter是一個普通的aspx頁面上,我把從代碼隱藏的方法和材料在本次:

...

rtn = dal.deleteRow(CInt(e.CommandArgument), currentTab()) 
    If Not IsNumeric(rtn) Then 
     MsgCenter1.addMessage("An Error occured deletion" & rtn, , , , "E") 
    Else 
     MsgCenter1.addMessage("Delete Successful", , , , "S") 
    End If 
    bindGrid() 
    MsgCenter1.Visible = True 
End Sub 

但是,當我嘗試使用主頁面從頁面上的asp:content事物做到這一點時,它告訴我msgCenter1未聲明。這是一些範圍問題。

我讀過有關使用的FindControl像

ctype(master.findcontrol("tbWhatever"), textbox).text = "FOO" 

但是當我嘗試投給我的用戶控件,它抱怨,因爲它再次,不宣。

我覺得好像我只是想念一塊拼圖,但是從昨天下午4點左右開始,我一直在逃避。

任何意見,指針或鏈接將不勝感激。

謝謝。

回答

10

首先這個指令添加到內容頁您要訪問的母版頁

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

其次,在母版頁設置公共屬性格式返回要訪問控制

public Label MasterLabel 
     { 
      get 
      { 
       return lblMaster; 
      } 
      private set 
      { 
       //do nothing 
      } 
     } 

最後只需訪問內容頁面中的控件就可以了

Master.MasterLabel.Text = "Hello from the content page!"; 
+1

很好解釋。 – AmitK 2009-08-06 18:39:47

+1

您的方法是否標記爲公開? – cptScarlet 2009-08-06 18:46:45

+0

我放棄了!我的VS的安裝正在遭受惡意代碼的攻擊,而且很怪異。它_does_工作!你搖滾!謝謝!!!!!! – aape 2009-08-06 18:49:31

1

我知道你的問題已被回答,但這不適用於它,但我注意到你正在爲「MessageCenter」控件傳遞1個長度的字符。我會用一個Enum而不是一個字符串來讓你的代碼變得更脆弱。現在你可以通過「放屁」作爲參數,它會編譯得很好。一個枚舉會給你一些編譯時檢查,並在運行時避免任何問題。

例子:

Message.Success
Message.Error
Message.Warning

+0

HA。你不知道,FART是一個祕密的參數選項,使信息的文本多彩! 只是在開玩笑。你是完全正確的。 這是一個寫給另一個開發人員的控件,收緊它是在我們'我們需要做的事情上,但可能永遠不會得到時間'列表。 我們剛開始只是發送錯誤,它總是紅色的,所以我們不必發送消息類型。然後,在需求階段之後,需求人員之一就像是:「嘿,夥計們!讓我們製作彩色的消息!」 開發人員認爲,「我們正在進行最終測試,現在不是時候了。」 – aape 2009-08-07 15:01:23

1

這是一直在用我的。

Master.FindControl("ControlID").Visible = false; 
相關問題