ASP.NET DropDownList 在回发时不保留所选项目 [英] ASP.NET DropDownList not retaining selected item on postback
问题描述
我有一个 ASP DropDownList,它在 Page_Load 事件上填充,在我选择一个项目并点击一个按钮后,选定的项目被清除,并且 DropDownList 中的第一个项目被选中.(DropDownList 仅在页面未回发时填充)
I have an ASP DropDownList that gets populated on the Page_Load event, after i select an item and hit a button the selected item gets cleared and the first item in the DropDownList gets selected. (The DropDownList is only populated when the page is not postback)
if (!IsPostBack)
{
List<Country> lCountries = new List<Country>();
List<CompanySchedule> lCompanySchedules = new List<CompanySchedule>();
this.Load_Countries(lCountries);
this.Load_Schedules(lCompanySchedules);
if (personnelRec == null)
{
personnelRec = new Personnel();
}
if (Request.QueryString["UA"] != null && Convert.ToInt32(Request.QueryString["UA"].ToString()) > 0)
{
userAccount.ID = Convert.ToInt32(Request.QueryString["UA"].ToString());
App_Database.Snapshift_Select_Helper.SNAPSHIFT_SELECT_PERSONNEL_APP_ACCOUNT(ref userAccount);
}
this.imgEmployeePicture.ImageUrl = "./images/Employees/nophoto.gif";
if (Request.QueryString["EI"] != null && Convert.ToInt32(Request.QueryString["EI"].ToString()) > 0)
{
this.Load_PersonnelRec(Convert.ToInt32(Request.QueryString["EI"].ToString()));
}
else
{
this.lblChangeDirectionHead.Enabled = false;
this.lblChangeDirections.Enabled = false;
this.lbSchedules.Disabled = true;
}
}
推荐答案
页面生命周期执行以下操作(以及与您的问题无关的其他步骤):
The page lifecycle does the following (plus other steps irrelevant to your question):
OnInit
- 从 ViewState 填充控件(在回发期间)
- 设置选定的值(在回发期间)
Page_Load
您需要启用 ViewState,以便它可以在选择"项目之前填充列表.在这种情况下,请确保不要在 Page_Load 中重新填充并丢失所选值.做一些类似 if (!IsPostback) {//Populate }
You need to have ViewState enabled so it can populate the list before it "selects" the item. In this case, make sure you don't repopulate in Page_Load and lose the selected value. Do something like if (!IsPostback) { // Populate }
否则,您必须在每个页面请求的 OnInit
事件中手动填充列表.Page_Load
在生命周期中为时已晚,因此所选项目丢失.
Otherwise, you have to populate the list manually in the OnInit
event on every page request. Page_Load
is too late in the lifecycle, so the selected item is lost.
DropDownList
还必须设置有效值(与浏览器中显示的文本分开).这是通过 DataValueField
属性完成的.每个值都必须是唯一的,否则只会选择第一个重复项.如果您在浏览器中查看 HTML 源代码,您应该:
The DropDownList
must also have valid values set (separate from the text displayed in the browser). This is done through the DataValueField
property. Each value must be unique, otherwise only the first duplicate item will ever be selected. If you look at the HTML source in your browser, you should have:
<select>
<option value="unique_value1">Displayed text1</option>
<option value="unique_value2">Displayed text2</option>
</select>
唯一值用于在服务器端选择正确的项目.
The unique values are used for selecting the right item on the server side.
这篇关于ASP.NET DropDownList 在回发时不保留所选项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!