maxp
maxp

Reputation: 25171

Control value persistance across postbacks

Given the following code, can anyone explain how on earth the dropdownlist is remembering its selected value across postbacks, given that viewstate is disabled and the control is being constructed after the viewstate has finished tracking values.

DropDownList ddl;
protected void Page_Load(object sender, EventArgs e)
{
    ddl = new DropDownList() {AutoPostBack = true, EnableViewState = false, ViewStateMode = ViewStateMode.Disabled };
    ddl.Items.Add(new ListItem("1"));
    ddl.Items.Add(new ListItem("2"));
    div.Controls.Add(ddl);
}

Upvotes: 3

Views: 214

Answers (2)

Dustin Hodges
Dustin Hodges

Reputation: 4193

Viewstate is not used to retain the value posted to the server. It may be used to retain the value that was selected the last time it was served to the client in viewstate but this is only so it can generate server side events such as selectedindexchanged. Its current value however is determined by what was posted by the control to the server. DropDownList implements IPostBackDataHandler which "Defines methods that ASP.NET server controls must implement to automatically load postback data."

Again, the current value of the DropDownList is not retrieved from ViewState, it is retrieved from the posted form values. If you do not need it to maintain its value, set its selected index to 0 (or whatever the default index is) after you have added it to the control tree. It is important you do it after you have added otherwise the posted value will be loaded when you add it to the control tree.

Upvotes: 1

TheGeekYouNeed
TheGeekYouNeed

Reputation: 7539

A control uses ControlState, which is separate from the ViewState. But similar in implementation.

ControlState vs. ViewState

Upvotes: 1

Related Questions