C# 我有一个控件,它为ViewState指定一个值。它可以工作,但ViewState被禁用。怎样

C# 我有一个控件,它为ViewState指定一个值。它可以工作,但ViewState被禁用。怎样,c#,asp.net,ajax,viewstate,C#,Asp.net,Ajax,Viewstate,我在我的ASPX页面上禁用了ViewState: <%@ Page Title="Home Page" MasterPageFile="~/Views/Shared/WebForm.master" Language="C#" EnableViewState="False" AutoEventWireup="True" CodeBehind="Dashboard.aspx.cs" Inherits="CableSolve.Web.Dashboard.Dashboard"%> 如果删除

我在我的ASPX页面上禁用了ViewState:

<%@ Page Title="Home Page" MasterPageFile="~/Views/Shared/WebForm.master" Language="C#" EnableViewState="False" AutoEventWireup="True" CodeBehind="Dashboard.aspx.cs" Inherits="CableSolve.Web.Dashboard.Dashboard"%>
如果删除对CssClass属性的分配,我会在页面上看到效果。然而,setter正在将值分配给ViewState


这是怎么回事?当然,如果禁用ViewState,无论是否分配了CssClass,我都看不到任何区别。

控件使用ControlState-而不是ViewState。它是一个单独的集合,尽管在控件内部使用相同的名称引用它。

控件使用ControlState-而不是ViewState。它是一个单独的集合,尽管在控件内部使用相同的名称引用它。

禁用ViewState意味着ViewState将不会在回发中持久化


在回发中,ViewState仍将工作。

禁用ViewState意味着ViewState不会在回发中持久化


在回发过程中,ViewState仍然有效。

即使禁用了ViewState,您也可以在页面的生命周期内自由使用ViewState包。禁用ViewState不会导致页面。ViewState属性不可用

本质上,您在属性setter中所做的是将CssClass值存储在松散类型的状态包中,而不是存储在成员变量中,具有相同的效果

我的猜测是,您正在标记中设置CSS属性,这意味着每次呈现页面时都会设置该值,因此ViewState无论如何都不会起作用

<my:control ID="myControl" CssClass="myCssClass" ... />

即使禁用了ViewState,您也可以在页面的生命周期内自由使用ViewState包禁用ViewState不会导致page.ViewState属性不可用

本质上,您在属性setter中所做的是将CssClass值存储在松散类型的状态包中,而不是存储在成员变量中,具有相同的效果

我的猜测是,您正在标记中设置CSS属性,这意味着每次呈现页面时都会设置该值,因此ViewState无论如何都不会起作用

<my:control ID="myControl" CssClass="myCssClass" ... />

运行时控件的ViewStateMode是什么?ASP.NET允许每个控件启用或禁用它。我的理解是ViewState是分层的。也就是说,如果ViewState在最顶层被禁用,那么它将对所有子级被禁用;更准确地说,子对象的默认行为是继承ViewStateMode值。我问这个问题是因为我的第一个想法是某个地方改变了默认设置,但是发布的答案似乎更有可能,而且在运行时检查也不会有帮助,因为它只会显示Inherit,而且您必须手动遍历控件树,所以别提了。运行时控件的ViewStateMode是什么?ASP.NET允许每个控件启用或禁用它。我的理解是ViewState是分层的。也就是说,如果ViewState在最顶层被禁用,那么它将对所有子级被禁用;更准确地说,子对象的默认行为是继承ViewStateMode值。我问这个问题是因为我的第一个想法是某个地方改变了默认设置,但是发布的答案似乎更有可能,而且在运行时检查也不会有帮助,因为它只会显示Inherit,而且您必须手动遍历控件树,所以别提了。此线程显示如何使用ControlState。它不引用ViewState??1在页面上禁用ViewState。2将某些内容保存到控件内的ViewState。3 ViewSource:检查页面上ViewState隐藏字段中的内容。它不会为空。当然可以,但请允许回发。如果禁用ViewState,则“某物”将丢失。但是,如果它被写入ControlState,我相信它不会丢失对的ViewState隐藏字段包含页面+控件信息的混合。当您在页面上禁用它时,控件仍然可以使用它,并且它将在回发中工作。此线程显示如何使用ControlState。它不引用ViewState??1在页面上禁用ViewState。2将某些内容保存到控件内的ViewState。3 ViewSource:检查页面上ViewState隐藏字段中的内容。它不会为空。当然可以,但请允许回发。如果禁用ViewState,则“某物”将丢失。但是,如果它被写入ControlState,我相信它不会丢失对的ViewState隐藏字段包含页面+控件信息的混合。当您在页面上禁用它时,控件仍然可以使用它,并且它将在postbacks.Woah中工作。非常感谢。你还有什么我能读的吗?另外,如果我打算禁用ViewState,您认为我应该重新编写上面的类以使用ControlState吗?在回发中使用ViewState非常微妙。哇。非常感谢。你还有什么我能读的吗?另外,如果我打算禁用ViewState,您认为我应该重新编写上面的类以使用ControlState吗?ViewState在回发中工作
是非常微妙的。不,我在为对象创建自己的类时删除了标记设置——这就是当我得知它设置为ViewState时,我感到惊讶的原因不,当我为该对象创建自己的类时,我删除了标记设置——当我得知它设置为ViewState时,这让我感到惊讶