【问题标题】:ASP.NET DropDownList not retaining selected item on postbackASP.NET DropDownList 在回发时不保留所选项目
【发布时间】:2011-05-10 12:05:14
【问题描述】:

我有一个在 Page_Load 事件中填充的 ASP DropDownList,在我选择一个项目并点击一个按钮后,选定的项目被清除并且 DropDownList 中的第一个项目被选中。 (DropDownList 仅在页面未回发时填充)

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;
    }
}

【问题讨论】:

  • 请发布您的 Page_Load 事件的代码。这将有助于回答。
  • 您的人口代码周围是否有“if (!IsPostBack)”?
  • 我在您的代码中没有看到 DropDownList。是通过this.Load_Countries(lCountries); 完成的吗?另外,您要在哪里获取所选值?
  • 是的,我在 Load_XXXX 函数中加载下拉列表。我正在尝试在保存函数中获取所选值

标签: asp.net drop-down-menu postback selection


【解决方案1】:

页面生命周期执行以下操作(加上与您的问题无关的其他步骤):

  1. OnInit
  2. 从 ViewState 填充控件(在回发期间)
  3. 设置选定的值(回发期间)
  4. Page_Load

您需要启用 ViewState,以便它可以在“选择”项目之前填充列表。在这种情况下,请确保您不会在 Page_Load 中重新填充并丢失所选值。做类似if (!IsPostback) { // Populate }

否则,您必须在每个页面请求的OnInit 事件中手动填充列表。 Page_Load 生命周期太晚,所以选中的项丢失了。

编辑:

DropDownList 还必须设置有效值(与浏览器中显示的文本分开)。这是通过DataValueField 属性完成的。每个值都必须是唯一的,否则只会选择第一个重复项。如果您在浏览器中查看 HTML 源代码,您应该有:

<select>
    <option value="unique_value1">Displayed text1</option>
    <option value="unique_value2">Displayed text2</option>
</select>

唯一值用于在服务器端选择正确的项目。

【讨论】:

  • 在属性窗口中,EnableViewState 设置为 true
  • 该列表不会在 Postback 上重新填充,它位于 if (!IsPostBack) 语句中,因此它只会被调用一次。见上面的代码
  • 是的,我在 Page_Load 中有一个断点,并且它只属于该 If 语句一次(在页面加载时)
  • 也有可能在 web.config 中禁用了 ViewState。尝试使用此工具检查 ViewState 以确保它具有您的下拉值:testingreflections.com/node/view/3424
  • 点击按钮后回发确定我已经知道这些项目仍在下拉列表中
【解决方案2】:

您使用的是母版页吗?如果是这样,请记住在母版页中将 EnableViewState 设置为 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多