asp.net下拉列表和viewstate

我有一个下拉列表,触发autopostback并触发SelectedIndexChanged更改事件。 我已将viewstate设置为true,但由于某种原因,所选值不会在回发之间保持不变。 我已经使用了数百次下拉列表,但似乎无法解决为什么会发生这种情况。 下拉列表中的项目是声明性编码的,例如

 Proffesional Colorful  

有任何想法吗。 我很难过

       

Proffesional Colorful

inheritance了背后的代码

  public partial class _Default : System.Web.UI.Page { protected void Page_PreInit(object sender, EventArgs e) { if (Session["Template"] != null) { string MasterPage = String.Format("~/{0}.master", (string)Session["Template"]); MasterPageFile = MasterPage; } } protected void Page_Load(object sender, EventArgs e){ } protected void OKButton_Click(object sender, EventArgs e) { if (UserNameTextBox.Text.Length != 0) { Session["UserName"] = UserNameTextBox.Text; Label Welcome = (Label)Master.FindControl("GreetingLabel"); Welcome.Text = String.Format("Welcome, {0}!", Session["UserName"]); } } protected void SitePrefDropDownList_SelectedIndexChanged(object sender, EventArgs e) { Session["Template"] = SitePrefDropDownList.SelectedValue; Server.Transfer(Request.Path); } } 

我能想到的唯一原因是你在页面加载事件中设置了一些默认值..比如…

 protected void Page_Load(object sender, EventArgs e) { SitePrefDropDownList.SelectedValue = "Proffesional"; } 

在页面生命周期中触发SitePrefDropDownList_SelectedIndexChanged事件之前, SitePrefDropDownList_SelectedIndexChanged调用Page_load事件,并重置Default / Old值

编辑:你的页面加载应该设置像…

 if (!Page.IsPostback) { SitePrefDropDownList.SelectedValue = "Proffesional"; } 

您是否在页面上禁用了ViewState?

即使控件本身启用了ViewState,如果页面禁用了ViewState,则不会为页面上的任何控件记录任何 ViewState – 请参阅MSDN上Page.EnableViewState属性上的文档。

检查页面的EnableViewState属性是否已被禁用,无论是在.aspx中还是在后面的代码中:

 // Any statements that look like this could be the source of your woes this.EnableViewState = false; Page.EnableViewState = false; <%@ Page EnableViewState="false" ... 

更改母版页会导致此类错误。 在会话中保存masterpagefilename并在preinit方法中将其设置为回发。

 protected override void OnPreInit(EventArgs e) { if (!IsPostBack) { this.MasterPageFile = "../../04.07.ManifestoKontrol.Web/ManifestoKontrolMasterPage.master"; Session[String.Concat(DefaultMasterPageSessionVariableName, this.ClientID)] = this.Master.AppRelativeVirtualPath; base.OnPreInit(e); } else { if (Session[String.Concat(DefaultMasterPageSessionVariableName, this.ClientID)] != null) this.MasterPageFile = Session[String.Concat(DefaultMasterPageSessionVariableName, this.ClientID)].ToString(); } } 

你有没有看到错误的价值和文字?: