2009-08-06 4 views
3

Ich bekomme diese Anfragen für 'machen Sie mich ein Werkzeug, xyz' für eine web app wir setzen auf.Wie greifen Sie über die Seite asp: contents mit dem Master auf Benutzersteuerelemente auf einer Masterpage zu?

Also nach dem dritten, realisierte ich, dass es einfacher wäre, sie alle zusammen zu vereinigen und eine Masterseite zu verwenden.

Ich habe eine Benutzersteuerung namens MessageCenter, die ich für Fehler, Erfolg und informative Nachrichten verwende, und so habe ich das auf der Masterseite fallengelassen.

<%@ 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"> 

...

Normalerweise, wenn die msgcenter auf einer regelmäßigen aspx Seite ist, nenne ich seine Methode und Sachen aus dem Code-Behind wie in diesem sub:

...

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 

Aber wenn ich versuche, dies von der Asp: Inhalt Sache auf der Seite mit der Masterpage zu tun, sagt es mir, dass msgCenter1 nicht deklariert ist. Es ist eine Art Problembereich.

Ich habe über die Verwendung lesen Findcontrol wie

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

Aber wenn ich versuche, meine Benutzerkontrolle zu werfen, klagt sie, weil sie wieder einmal nicht deklariert ist.

Ich fühle mich, als ob ich gerade ein Stück des Puzzles vermisse, aber es ist mir seit ungefähr 4 PM gestern entgangen.

Alle Ratschläge, Hinweise oder Links würden am meisten geschätzt werden.

Danke.

Antwort

10

Fügen Sie zunächst diese Anweisung zur Inhaltsseite möchten, dass Sie die Masterseite zugreifen

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

Zweitens, auf der Masterseite Einrichtung eines öffentlichen propery, die die Kontrolle, die Sie zugreifen möchten, gibt

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

Schließlich greifen Sie einfach auf das Steuerelement in der Inhaltsseite wie folgt zu:

+1

Sehr gut erklärt. – AmitK

+1

Ist Ihre Methode als öffentlich markiert? – cptScarlet

+0

Ich annulliere das! Meine Installation von VS leidet dll verrotten und sich seltsam benehmen. Es funktioniert! Du schaukelst! Vielen Dank!!!!!! – aape

1

Ich weiß, dass Ihre Frage beantwortet wurde und dies trifft nicht zu, aber ich habe festgestellt, dass Sie 1 Zeichen Länge für Ihr "MessageCenter" -Steuerelement übergeben. Ich würde ein Enum anstelle einer Zeichenfolge verwenden, um Ihren Code etwas weniger spröde zu machen. Wie es jetzt steht, können Sie als Parameter "Furz" eingeben und es wird gut kompilieren. Ein Enum gibt Ihnen einige Kompilierzeitprüfung und vermeidet Probleme zur Laufzeit.

Beispiele:

Message.Success
message.error
Message.Warning

+0

HA. Wissen Sie, dass FART eine geheime Argumentoption ist, die den Text der Nachricht mehrfarbig macht! Nur Spaß. Du hast vollkommen recht. Dies ist eine Kontrolle, die ein anderer Entwickler geschrieben hat, und es zu verschärfen, ist auf unserer "Dinge, die wir tun müssen, aber wahrscheinlich nie die Zeit bekommen" -Liste. Wir begannen nur Fehler zu senden, und es war immer rot, so dass wir den Nachrichtentyp nicht senden mussten. Dann, nach der Anforderungsphase, war einer der Anwärter wie "Hey Leute! Lass uns farbige Nachrichten machen!" Und die Entwickler dachten: "Wir sind im Endtest. Jetzt ist nicht die Zeit." – aape

1

das ist, was ich verwendet worden war.