ViewState [“sample”]变量不保留复合控件中的回发值

时间:2010-10-18 22:32:26

标签: c# asp.net controls composite

我创建了一个带有样本详细信息的复合控件,如下所示。基本上,第一次在页面加载时控件设置一个视图状态变量,问题是在回发后(单击按钮时),ViewState变量为null。我已经进行了广泛的研究,但我无法找到解决方案。我检查了所有Microsoft推荐的文章以及其他开发人员。这种方法似乎适用于每个人,我无法弄清楚我做错了什么。如果有人可以提供帮助,我会非常感激。

PS:此代码可能无法正常工作,因为它仅用于说明目的。但这正是我在我的代码中所做的。

Public class Test : CompositeControl
{
    private Button btnTest = new Button();
    public string TestViewState
    {
        get
        {
            string s = (string)ViewState["test"];
            return (s == null) ? String.Empty : s;
        }
        set
        {
            ViewState["test"] = value;
        }
    }

    private void set()
    {
        TestViewState = "test";
    }

    protected void Page_Load(object sender, EventArgs e)
    {  
        if(!Page.IsPostBack)
            set();  
    }

    protected override void RecreateChildControls()
    {
        EnsureChildControls();
    }

    protected override void CreateChildControls()
    {
         base.Controls.Clear();  
         btnTest.ID = "btnTest";
         btnTest.Click += new EventHandler(btnSubmitTest_Click);

         if (!ChildControlsCreated)
         Controls.Add(btnTest);      

        base.CreateChildControls();
    }

    protected override void Render(HtmlTextWriter writer)
    {
        btnSumbit.Render(writer);
    }

    protected void btnSubmitTest_Click(object sender, EventArgs e)
    {
        string test = TestViewState; // Viewstate value is null here!!!!!!
    }
}

2 个答案:

答案 0 :(得分:0)

你确定Page_Load被调用了吗?据我所知,“符号”仅适用于页面和用户控件(没有检查)。尝试覆盖:

protected override void OnLoad(EventArgs e)
{
    ...
}

使用调试器进行测试。

答案 1 :(得分:0)

好的,另一个团队成员在web.config级别禁用了enableviewstate。很高兴我发现了它。感谢Arthur确认它对您有用。