Serenity
Serenity

Reputation: 5098

Accessing RadEditor control from master page's code behind...its not finding any radEditor control when it is there..whats wrong?

Its not executing statements in if block in my method

Master Page:-

page load event:-

Control c = new Control();
DoSomething(c);

My method:-

 protected void DoSomething(Control control)(
        {

            foreach (Control c in control.Controls)
            { 
                if(typeof(c).Equals(Telerik.Web.UI.RadEditor))
                {
                   Telerik.Web.UI.RadEditor rad = c as Telerik.Web.UI.RadEditor;

                   label1.Visible = true; label1.Text = "dhchk";
                   rad.CssFiles.Add("~/styles/myStyle.css"); 
                   rad.CssFiles.Add("~/styles/myStyle2.css");
                   rad.CssFiles.Add("~/styles/myStyle3.css");
                }            
                else
                {
                      DoSomething(c);
                }

            }

        }

my content page:-

    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

    <telerik:RadEditor ID="Editor1" EnableEmbeddedBaseStylesheet="false"  EnableEmbeddedSkins=false runat="server">
    </telerik:RadEditor>

<telerik:RadEditor ID="Editor2" EnableEmbeddedBaseStylesheet="false"  EnableEmbeddedSkins=false runat="server">

    </telerik:RadEditor>

[EDIT] ok when debugging..I rt clicked "c" and then Quick watch...it says "The name 'c' does not exist in the current context" (?!?!) how so ?

Upvotes: 0

Views: 1568

Answers (4)

SimSimY
SimSimY

Reputation: 3686

Well, the Master page renders first so you won't have access from the master page to any of the content page controls. You can achive this using events and passing the control from the content to the master

udpate: Again - Accessing user controls from the master page is flaw in the whole master->content design. the closest thing I can imagine is adding static function

public static void AddDesign(RadEditor obj)
{
...
}

and then call the function form the Page_Load of the user control

MASTER_PAGE_CLASS_NAME.AddDesign(RadEditor1);

Upvotes: 1

Dick Lampard
Dick Lampard

Reputation: 2266

The load and render events of the master page are fired after those of the content page (as said here). Hence the controls in the content page should be available by the time these two events are fired?

Upvotes: 0

Geoff Appleford
Geoff Appleford

Reputation: 18832

You should change things around and call your MasterPage method from the content control.

In your masterpage add the method:

public void DoSomething(Telerik.Web.UI.RadEditor rad)
{
    label1.Visible = true; label1.Text = "dhchk";
    rad.CssFiles.Add("~/styles/myStyle.css"); 
    rad.CssFiles.Add("~/styles/myStyle2.css");
    rad.CssFiles.Add("~/styles/myStyle3.css");         
}

Call the function from an appropriate event in your page/content control. eg Page.Load, Editor1.Load etc

Master.DoSomething(Editor1);

Update

From the masterpage, you should search for child controls in the Content controls

ContentPlaceHolder1.FindControl("Editor1");

or you could try something like:

foreach (Control c in ContentPlaceHolder1.Controls)
{ 
     if(typeof(c).Equals(Telerik.Web.UI.RadEditor))
     {
         Telerik.Web.UI.RadEditor rad = c as Telerik.Web.UI.RadEditor;

         label1.Visible = true; label1.Text = "dhchk";
         rad.CssFiles.Add("~/styles/myStyle.css"); 
         rad.CssFiles.Add("~/styles/myStyle2.css");
         rad.CssFiles.Add("~/styles/myStyle3.css");
      }            
      else
      {
         DoSomething(c);
      }

 }

Upvotes: 1

Incik
Incik

Reputation: 11

Well, I'm not sure, you can access controls in page like this.

At first: that editor should be probably in some Panel (or some other container), so i should look like this:

<asp:Panel ID="pnl1" runat="server">
    <telerik:RadEditor ID="Editor1" EnableEmbeddedBaseStylesheet="false" EnableEmbeddedSkins=false runat="server" />
    <telerik:RadEditor ID="Editor2" EnableEmbeddedBaseStylesheet="false" EnableEmbeddedSkins=false runat="server" />
</asp:Panel>

Then try this:

protected void Page_Load(object sender, EventArgs e)
{
    foreach (Controls c in pnl1.Controls)
    {
         if (c is Telerik.Web.UI.RadEditor)
         {
              // do you stuff ...
         }
    }
}

Upvotes: 1

Related Questions