C# ViewState[";sample";]变量在复合控件中回发时不保留值

C# ViewState[";sample";]变量在复合控件中回发时不保留值,c#,asp.net,controls,composite,C#,Asp.net,Controls,Composite,我创建了一个复合控件,其示例详细信息如下。基本上,控件第一次在页面加载时设置了一个视图状态变量,问题是在返回时(单击按钮时),视图状态变量为空。我已经进行了广泛的研究,但我无法找到解决方案。我查阅了所有微软推荐的文章,也查阅了其他开发者的文章。这种方法似乎对每个人都有效,我不知道我做错了什么。如果有人能帮忙,我会非常感激 PS:此代码可能无法工作,因为它仅用于说明目的。但这正是我在代码中所做的 Public class Test : CompositeControl { private

我创建了一个复合控件,其示例详细信息如下。基本上,控件第一次在页面加载时设置了一个视图状态变量,问题是在返回时(单击按钮时),视图状态变量为空。我已经进行了广泛的研究,但我无法找到解决方案。我查阅了所有微软推荐的文章,也查阅了其他开发者的文章。这种方法似乎对每个人都有效,我不知道我做错了什么。如果有人能帮忙,我会非常感激

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

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

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

使用调试器测试它。

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

我忘了提到此控件是从另一个复合控件调用的。。可能是子控件数据未保存在viewstate中。是,正在调用它。实际上,页面加载是从该控件所在的页面调用的。我把它放在这里是为了展示。我还验证了page_load也在控件内工作。。我错误地说这个自定义控件是另一个控件的子控件。事实上,这是直接从aspx页面使用的。我已经用ASP.NET网站测试了您的代码。尚未调用页面加载,已调用OnLoad(…)。当将set()移动到OnLoad(…)时,一切正常,当我尝试使用此代码时,它似乎工作正常,即使是页面加载(在实际页面中)…因此,它一定是我实际控制的某个东西。。。我会进一步调查的。谢谢你的检查。哦,这些“好”虫子之一;-)