在父级的Control.Render方法中修改控件的属性时,为什么ViewState会丢失?

时间:2009-11-09 17:56:18

标签: asp.net webforms asp.net-2.0 viewstate

我在UserControl中有如下代码:

Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
    If someCondition Then
        childControl.Enabled = false
    End If

    MyBase.Render(writer)
End Sub

每当someCondition为true且在Render事件期间将childControl.Enabled设置为false时,将销毁childControl的ViewState(即如果它是TextBox,则用户输入的文本将丢失)。

请注意,只有ViewState丢失...控件仍然会在第一次使用正确的属性值进行渲染。仅在PostBack上,从ViewState恢复属性时实际丢失的值。

时间表如下:

  • Page_Load(初始)
    属性通过代码设置。
  • SaveViewState
  • 渲染
    属性已修改。
  • 发生回发。
  • LoadViewState
  • 的Page_Load
    未更改的控件的值仍然可用,但在Render方法期间设置了属性的控件是空白的。
  • SaveViewState

我的理解是ViewState在调用Control.SaveViewState期间变得固定,它发生在调用Control.Render之前......但是我有什么细微差别吗?

1 个答案:

答案 0 :(得分:2)

在空值后禁用的控件是什么?或者什么都不发布?说实话,我忘记了。但是,如果他们发布空值,那么您的视图状态就会被覆盖,就像您在文本框中输入新内容然后发布页面一样。