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

99封情书 提交于 2020-01-07 02:46:11

问题


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 ?


回答1:


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



回答2:


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



回答3:


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

 }



回答4:


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?



来源:https://stackoverflow.com/questions/4084849/accessing-radeditor-control-from-master-pages-code-behind-its-not-finding-any

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!