ASP.NET DropDownList 在回发时不保留所选项目 [英] ASP.NET DropDownList not retaining selected item on postback

查看:21
本文介绍了ASP.NET DropDownList 在回发时不保留所选项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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):

  1. OnInit
  2. 从 ViewState 填充控件(在回发期间)
  3. 设置选定的值(在回发期间)
  4. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆