当前位置:  开发笔记 > 编程语言 > 正文

为什么我的自定义用户控件的子项未初始化?

如何解决《为什么我的自定义用户控件的子项未初始化?》经验,为你挑选了0个好方法。

更新: 我一直在试验我的控件,我想我已经接近了.请继续阅读以获取最新信息.

我有2个ASP.NET 2.0用户控件,其中之一被置于内部的另一个的.在内部控件内部,我有一个HtmlAnchor标签控件,我正在尝试从外部控件设置URL.当我尝试HRef从呈现页面的标记设置属性时,HtmlAnchor控件是null并抛出异常.

URL set属性在内部或外部控件的OnInit事件之前和主页面的' '事件之前被调用OnPreInit.我假设这是因为我在页面上的父控件的标记中设置子控件的URL我正在渲染控件,这意味着之前设置了值OnInit().这是我正在使用的代码的(精简版):

[ParseChildren(true)]// <- Setting this to false makes the 
                     //    page render without an exception 
                     //    but ignores anything in the markup.
[PersistChildren(false)]
public partial class OuterControl : System.Web.UI.UserControl
{
    // The private '_Inner' control is declared 
    // in the .ascx markup of the control
    [PersistenceMode(PersistenceMode.InnerProperty)]
    public InnerControl Inner
    {
        get{ return _Inner; }
        set{ _Inner = value; }
    }
}

public partial class InnerControl : System.Web.UI.UserControl
{
    // The private 'linkHref' control is declared
    // in the .ascx markup of the control
    public string Url
    {
        get { return linkHref.HRef; }
        set { linkHref.HRef = value; }
    }
}

OuterControl在我的Default.aspx页面上使用,如下所示:


    

在上面的标记示例中,如果我尝试呈现此页面,则会抛出异常,因为该linkHref控件为null.使用我的调试器我可以看到InnerControl中的每个控件都为null,但是OnInit()Url访问该属性时,还没有触发InnerControl和OuterControl的事件.

更新
我认为添加属性' ParseChildren'和' PersistChildren'会有所帮助.我以前在服务器控件中使用它们但从未在用户控件中使用它们,尽管效果似乎相似.我不认为我正确地解释了这两个属性的文档,但它可以阻止异常被抛出.但页面标记会被忽略.

有没有人知道如何让这项工作.我不明白为什么这些控件以前设置的值OnInit().当我尝试使用ASPX标记设置它们的值时,它的构造函数InnerControl被调用两次.一旦根据标记设置值(我假设)并再次开启OnInit()(我猜测是为什么标记值会被忽略).

这种努力是无望的还是我只是从错误的角度接近它?

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有