English 中文(简体)
Why is ViewState lost when a control s property is modified during its parent s Control.Render method?
原标题:

I have code like the following in a 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

Whenever someCondition is true and childControl.Enabled is set to false during the Render event, the ViewState for childControl is destroyed (i.e. if it is a TextBox, the text that the user has entered is lost).

Note that only the ViewState is lost... The control still renders with the correct property values the first time around. Only on PostBack, when properties are restored from ViewState are the values actually lost.

The timeline is as follows:

  • Page_Load (initial)
    Properties are set via code.
  • SaveViewState
  • Render
    Properties are modified.
  • Postback occurs.
  • LoadViewState
  • Page_Load
    Values of unaltered controls are still available, but controls which have had properties set during the Render method are blank.
  • SaveViewState

My understanding was that the ViewState became fixed during the call to Control.SaveViewState, which occurs prior to the call to Control.Render... But is there some nuance that I m missing?

最佳回答

Do controls that are disabled post empty values? Or post nothing at all? To be honest, I forget. But if they post empty values, then your viewstate is being overridden just like if you typed something new into the textbox and then posted the page.

问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签