Tag: viewstate

无法加载viewstate

好的,刚刚开始收到此错误,我不知道为什么。 我有一个托管页面,其中包含listview和一个带有usercontrol的面板。 列表视图使用链接按钮加载记录。 单击链接按钮以编辑该特定记录 – 它将在窗体视图(在用户控件内)中加载,并进入编辑模式。 在formview中发生更新后,我正在触发我的主机页面正在侦听的事件。 托管页面然后重新绑定列表视图以显示更新的数据。 这都在更新面板内。 所以这一切都有效 – 但是当我点击另一个链接按钮时,我得到以下错误: Message: Sys.WebForms.PageRequestManagerServerErrorException: Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must […]

维护转发器的视图状态

我有一个问题,即转发器的视图状态,即转发器内的控件不维护其视图状态。 我有以下内容: 中继器1: <asp:LinkButton Text="Add" CommandName="Add" CommandArgument= runat=”server” /> 单击链接按钮时,CommandArgument的值将存储在页面上的隐藏字段中。 回发后,在加载prerender事件处理程序之前,我无法获取隐藏字段的值。 所以在我的prerender事件中,我获取隐藏字段的值并将其存储在List属性中,如下所示: if (!string.IsNullOrEmpty(this.SelectedImageIDsInput.Text)) { this.ImageList.Add(this.SelectedImageIDsInput.Text); } List属性如下所示: public List ImageList { get { if (this.ViewState[“ImageList”] == null) { this.ViewState[“ImageList”] = new List(); } return (List)(this.ViewState[“ImageList”]); } set { this.ViewState[“ImageString”] = value; } } 一旦我将值存储到我的List属性中,我就绑定了我的第二个转发器(再次在prerender事件中): this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList; this.rptSelectedImages.DataBind(); 第二个中继器有一个下拉列表和一个文本框。 问题是不维护这些子控件的视图状态。 我认为这是因为每次回发我重新绑定转发器,因此它被重建。 我不知道的是我怎么可能绕过这个? ImageList属性仅在回发时更新,因此我显然必须使用每个回发重新绑定转发器 – […]

用户控制在Postback中丢失Viewstate

我有一个用户控件,它使用对象作为内部属性(下面是一些代码)。 我在以编程方式设置Step类的属性时遇到问题,当以编程方式设置时,它会在回发时丢失,这表明与Viewstate(?)有关。 以声明方式设置Step类的属性时,它工作正常。 有没有人对这个代码是什么/什么导致它在回发中失去状态有任何想法? ASPX ASPX代码背后 protected void btnGoToStep2_OnClick(object sender, EventArgs e) { StepControl1.Step1.StatusText = “4 Products Selected”; } protected void btnBackToStep1_OnClick(object sender, EventArgs e) { // StatusText (of Step1) gets lost at this point. } 用户控制代码背后 public partial class StepControl : System.Web.UI.UserControl { [PersistenceMode(PersistenceMode.InnerProperty)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] [NotifyParentProperty(true)] public Step Step1 { get; set; } [PersistenceMode(PersistenceMode.InnerProperty)] […]

如何删除或压缩您的asp.net视图状态

花了很多时间从应用程序驱逐asp.net的大型(但可以理解的有用)视图状态,我认为值得分享它是如何完成的。 基本上,我希望这个问题对缩小/压缩/删除viewstate的所有解决方案开放。

ASP.NET中的Viewstate和控件

我几天前发布了一个关于viewstate的问题,经过一些测试后,我得出了一些结论/结果。 基于这些结果,我有一些关于某人如何做某些事情的问题。 以下是我运行的测试结果: 如果从页面的OnInit加载usercontrolA,那么他的视图状态将在OnLoad可用。 usercontrolA从其OnInit加载的所有其他控件将在其OnLoad准备好其viewstate。 如果从Page的OnLoad加载usercontrolA,那么他的视图状态将在OnPreRender可用。 usercontrolA从其OnLoad加载的所有其他控件将在其OnPreRender提供其视图状态。 如果usercontrolA是从一个事件加载的(例如:按钮点击。事件在OnLoad之后和OnPreRender之前触发),那么他的视图状态将不可用。 usercontrolA loades的所有其他控件都不会提供其viewstate。 因此,在一个完美的世界中,您总是会使用情境#1加载所有控件,以便他们的视图状态可以在他们的OnLoad 。 不幸的是,当您需要从按钮单击或OnLoad加载控件时,是否无法控制在OnPreRender阶段之前获取其视图状态? 我已经阅读了一堆关于viewstate的文章,并且认为我理解它,但是在我当前的应用程序上加载加载其他用户控件的usercontrols,我真的很难在我的叶子上获得viewstate(最后在链中) )usercontrol。 任何建议和/或链接表示赞赏。

页面生命周期中的.net ViewState

我有一个页面包含一个名为PhoneInfo.ascx的控件。 PhoneInfo是使用LoadControl()动态创建的,然后调用initControl()函数传入初始化对象以在PhoneInfo中设置一些初始文本框值。 然后,用户更改这些值并点击页面上的提交按钮,该按钮连接到“submit_click”事件。 此事件调用PhoneInfo中的GetPhone()函数。 返回值包含所有新用户输入的值,但phoneId值(存储在ViewState中且未由用户编辑)始终返回为null。 我相信viewstate负责跟踪用户在回发中输入的数据,所以我无法理解用户值是如何回来的,而不是明确设置的ViewState [“PhoneId”]值! 如果我在PhoneInfo的page_load事件中设置ViewState [“PhoneId”]值,它会在回发后正确检索它,但这不是一个选项,因为我只能在页面准备好提供它时初始化该值。 我确定我只是在某种程度上弄乱页面生命周期,任何建议或问题都会有所帮助! 我在下面列出了实际代码的简化版本。 包含页面的代​​码隐藏 protected void Page_Load(object sender, EventArgs e) { Phone phone = controlToBind as Phone; PhoneInfo phoneInfo = (PhoneInfo)LoadControl(“phoneInfo.ascx”); //Create phoneInfo control phoneInfo.InitControl(phone); //use controlToBind to initialize the new control Controls.Add(phoneInfo); } protected void submit_click(object sender, EventArgs e) { Phone phone = phoneInfo.GetPhone(); } PhoneInfo.ascx代码隐藏 […]

在回发期间,selectedIndex丢失了 – ASP.NET

我有一个列表框控件: 背后的代码类似于: private void Page_Load(object sender, System.EventArgs e) { lbox.SelectedIndexChanged+=new EventHandler(lbox_SelectedIndexChanged); if(!Page.IsPostBack) { LoadData(); } } private LoadData() { lbox.DataSource = foo(); lbox.DataBind(); } protected void lboxScorecard_SelectedIndexChanged(object sender, EventArgs e) { int index = (sender as ListBox).selectedIndex; } private void Page_Load(object sender, System.EventArgs e) { lbox.SelectedIndexChanged+=new EventHandler(lbox_SelectedIndexChanged); if(!Page.IsPostBack) { LoadData(); } } private LoadData() { […]

让asp.net在会话中存储视图状态而不是增加html

我试图让asp.net在会话中存储viewstate,而不是填充html。 现在我已经读过asp.net附带了SessionPageStatePersister,可以使用它来代替默认的HiddenFieldPageStatePersister来执行此操作。 我想知道我是怎么放弃它的? 这就是我到目前为止:我想我需要创建一个PageAdapter,它从GetStatePersister方法返回一个SessionPageStatePersister,并以某种方式让页面使用这个pageadapter。 但Page.PageAdapter只有一个getter,所以我不确定你是如何设置它的。 请参阅此处的“备注”标题: http : //msdn.microsoft.com/en-us/library/system.web.ui.hiddenfieldpagestatepersister.aspx 谢谢!

在PostBack之后将数据保存在GridView中

我有一个与SqlDataSource相关联的GridView 。 当我单击一个Button ,我更改了SelectCommand ,然后使用DataBind来更新GridView 。 在PostBack之后,我想要保留最新的Data,我不希望GridView由原始的SelectCommand加载。 我知道这是通过一个名为ViewState的东西完成的,但我没有设法以正确的方式实现它。 我在Grid上尝试了EnableViewState=”true”和EnableViewState=”false” ,没有运气。 码 在启动时, GridView将填充SELECT * FROM USERS的结果。 现在我单击一个Button ,执行以下操作: UsersSource.SelectCommand = “SELECT * FROM USERS WHERE user_id = 1”; GridView1.DataBind(); GridView充满了新的数据。 现在让我们说,我点击一个标题对这个表进行排序,会有一个回发,之后,这个表中的数据将包含第一个查询的结果。 这里有什么需要做的? 更多信息 宣言: 页面加载方法中没有任何内容。

在回发时以编程方式添加控件

回发 :如何在我的代码隐藏文件中访问ASP.NET控件,这些文件是以编程方式添加的? 我将一个CheckBox控件添加到占位符控件: PlaceHolder.Controls.Add(new CheckBox { ID = “findme” }); ASPX文件中添加的控件在Request.Form.AllKeys中显示正常,除了我以编程方式添加的控件。 我究竟做错了什么? 在控件上启用ViewState没有帮助。 如果只是那么简单:)