从母版页的代码后面访问RadEditor控件...当它出现时没有找到任何radEditor控件......有什么问题?

时间:2010-11-03 07:05:22

标签: c# asp.net css telerik

它不在我的方法中的if块中执行语句

母版页: -

页面加载事件: -

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

我的方法: -

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

            }

        }

我的内容页面: -

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

[编辑] 确定调试时..我点击“c”然后快速观看...它说“当前上下文中不存在名称'c'”(?!?!)如何那么?

4 个答案:

答案 0 :(得分:1)

好吧,Master页面首先渲染,因此您无法从母版页访问任何内容页面控件。您可以使用事件并将控件从内容传递给主

来实现此目的

UDPATE: 再次 - 从母版页访问用户控件是整个master-&gt;内容设计中的缺陷。我能想象的最接近的是添加静态函数

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

然后从用户控件的Page_Load调用该函数

MASTER_PAGE_CLASS_NAME.AddDesign(RadEditor1);

答案 1 :(得分:1)

好吧,我不确定,您可以像这样访问页面中的控件。

首先:该编辑器应该可能在某个Panel(或其他一些容器)中,所以我应该是这样的:

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

然后试试这个:

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

答案 2 :(得分:1)

您应该更改内容并从内容控件中调用MasterPage方法。

在您的母版页中添加方法:

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

通过页面/内容控件中的相应事件调用该函数。例如Page.Load,Editor1.Load等

Master.DoSomething(Editor1);

更新

在母版页中,您应该在内容控件中搜索子控件

ContentPlaceHolder1.FindControl("Editor1");

或者您可以尝试类似:

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

 }

答案 3 :(得分:0)

主页的加载和呈现事件在内容页面的那些之后被触发(如所述here)。因此,当这两个事件被触发时,内容页面中的控件应该可用吗?