asp.net中的下拉列表绑定问题

本文关键字:绑定 问题 下拉列表 net asp | 更新日期: 2023-09-27 18:11:04

我有一个占位符,它有一些下拉列表和一个按钮,现在这个占位符最初是隐藏的,当用户在页面上进行任何搜索时,基于占位符可见,下拉列表被填充,这是工作绝对很好

现在的问题开始时,当我点击按钮内的占位符(下拉列表旁边),在这个时间点,所有的下拉列表得到空白。我理解第一个页面加载执行,因为没有绑定(作为下拉框绑定在搜索点击),它会使其空白,但我没有得到一旦下拉框已被绑定,为什么它会对页面加载解除绑定。下面是我的代码:

Page Load:
protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            plcView.Visible = false;
        }
    }
Search Button Click:
    protected void btnSearch_Click(object sender, EventArgs e)
    {
        try
        {
            if (!AppGlobal.IsSanadCompleted(AppGlobal.Sanads.Amma, txtITSId.Text))
            {
                lblErrorMessage.CssClass = "dnnFormMessage dnnFormWarning";
                lblErrorMessage.Text = "You need Amma Sanad to attempt for Hifz Program.";
                plcView.Visible = false;
            }
            else
            {
                plcView.Visible = true;
                txtJuz.Text = (Hifz.GetLastJuzAttempted(txtITSId.Text) + 1).ToString();
                drpAyahFrom.DataTextField = "Key";
                drpAyahFrom.DataValueField = "Value";
                drpAyahFrom.DataSource = objHifz.GetAyahListForHifzProgram(Convert.ToInt32(txtJuz.Text));
                drpAyahFrom.DataBind();
                drpAyahTo.DataTextField = "Key";
                drpAyahTo.DataValueField = "Value";
                drpAyahTo.DataSource = objHifz.GetAyahListForHifzProgram(Convert.ToInt32(txtJuz.Text));
                drpAyahTo.DataBind();
                drpGrade.DataSource = AppGlobal.GetGrades();
                drpGrade.DataBind();
            }
        }
        catch (Exception ex)
        {
            Response.Write(ex.ToString());
        }
    }

我甚至尝试在页面和皮肤(我使用Dotnetnuke)级别启用EnableViewstate,但仍然没有任何区别。

谁能告诉我哪里出错了

asp.net中的下拉列表绑定问题

DotNetNuke只不过是一个ASP。因此,为了研究您的问题,我们必须深入研究ASP. Net应用程序的页面生命周期。网络页面。在这里,您将注意到一个名为savestatcomplete的Page_Event。您可以看到,这是在Render事件之前调用的(在此事件中,页面将显示给最终用户)。因此,在呈现页面之后所做的任何更改都不会在默认情况下保存到ViewState中。因为你的下拉框在SaveStateComplete期间是空白的,在PostBack之后你会得到空的下拉框。

解决方案是在自定义ViewState中强制保存数据源。例如,在您的按钮单击中,添加以下内容:

var obj = objHifz.GetAyahListForHifzProgram(Convert.ToInt32(txtJuz.Text)));
drpAyahFrom.DataSource = obj;
ViewState["myUniqueKey"] = obj;
在Page_Load事件中,您可以使用:
    if (!IsPostBack)
    {
        plcView.Visible = false;
    }
    else
    {
        if(ViewState["myUniqueKey"] != null)
        {
             drpAyahFrom.DataTextField = "Key";
             drpAyahFrom.DataValueField = "Value";
             drpAyahFrom.DataSource = ViewState["myUniqueKey"];
             drpAyahFrom.DataBind();
        }
    }

您可能必须根据需求执行强制转换。