【问题标题】:LoadViewState not fired on my user controlLoadViewState 未在我的用户控件上触发
【发布时间】:2010-03-19 15:31:37
【问题描述】:

我有一个嵌套在转发器中的用户控件。 在我的用户控件中,我有另一个中继器,其中有一个面板。

我正在尝试覆盖我的用户控件的 LoadViewState 事件并将控件动态添加到面板。我想在 LoadViewState 中执行此操作,以便在加载视图状态之前添加动态控件,以便它们在回发后保留其值。

由于某种原因,用户控件 (ascx) 上的 LoadViewState 事件未触发。有什么方法可以强制它开火,还是我可以使用另一种方法?我已经排除了用户控件转发器数据绑定事件,因为即使没有发生数据绑定,我也需要它工作,而且我也无法在转发器项目创建事件上执行此操作,因为子面板和内部 html 不存在还没有。

【问题讨论】:

  • 你能发布你的代码隐藏吗?还是它的样本?

标签: asp.net user-controls viewstate loadviewstate


【解决方案1】:

LoadViewState 不适合添加子控件。要在用户控件中动态添加控件,您需要查看CreateChildControls 方法。

它不会触发LoadViewState 事件,因为您需要在ViewState 中至少保存一个值才能触发事件。

【讨论】:

  • WebCotnrols 怎么样? LoadViewState 未在我的 WebControl 中触发。我创建了一个继承自 WebControl 的类。
【解决方案2】:

我认为我在使用一些动态创建的子用户控件时遇到了类似的问题。 LoadViewState 没有在回发中被调用,即使我在第一次创建它们时能够访问它们的 ViewState。 SaveViewState 似乎也被正确调用了。在完全初始化之前,子 ViewState 在页面Init 事件中并不是真正可用的(没有这会导致异常),并且仅当控件添加到父级时才会发生这种情况。确保这一点后,子 ViewState 会在回发中正确持久化。

    // Belongs to a Page. If you create the children control in the
    // Load event in you can also access the page ViewState
    protected void Page_Init(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            for (int it = 0; it < 5; it++)
            {
                ChildControl child = LoadControl("ChildControl.ascx")
                    as ChildControl;
                child.ParentPage = this;
                TabPanel tab = tabContainer.FindControl("TabPanel" + it)
                    as TabPanel;
                // Ensure to add the child control to its parent before
                // accessing its ViewState!
                tab.Controls.Add(child);     // <---
                string caption = "Ciao" + it;
                child.Caption = caption;     // Here we access the ViewState
                tab.HeaderText = caption;
                tab.Visible = true;
                _Children.Add(child);
            }
        }
        [...]
    }

    // Belongs to ChildControl 
    public string Caption
    {
        get { return ViewState["Caption"] as string; }
        internal set { this.ViewState["Caption"] = value; }
    }

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多