Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net中的下拉列表绑定问题_C#_Asp.net_Data Binding_Html Select_Pageload - Fatal编程技术网

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

C# asp.net中的下拉列表绑定问题,c#,asp.net,data-binding,html-select,pageload,C#,Asp.net,Data Binding,Html Select,Pageload,我有一个占位符,它有一些dropdownlist和一个按钮,现在这个占位符最初是隐藏的,当用户在页面上进行任何搜索时,基于占位符变为可见,dropdownlist变为填充,现在,当我单击dropdownlist旁边占位符中的按钮时,问题开始出现,此时,所有dropdownlist都变为空白。我理解第一个页面加载是执行的,因为没有绑定,因为下拉列表在搜索时被绑定,单击它会使其为空,但我不明白一旦下拉列表被绑定,为什么页面加载需要解除绑定。这是我的密码: Page Load: protected

我有一个占位符,它有一些dropdownlist和一个按钮,现在这个占位符最初是隐藏的,当用户在页面上进行任何搜索时,基于占位符变为可见,dropdownlist变为填充,现在,当我单击dropdownlist旁边占位符中的按钮时,问题开始出现,此时,所有dropdownlist都变为空白。我理解第一个页面加载是执行的,因为没有绑定,因为下拉列表在搜索时被绑定,单击它会使其为空,但我不明白一旦下拉列表被绑定,为什么页面加载需要解除绑定。这是我的密码:

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());
        }
    }
我甚至尝试在页面和皮肤上启用EnableViewstate,我使用的是Dotnetnuke级别,但仍然没有任何区别


谁能告诉我哪里会出错。

DotNetNuke只是一个ASP.Net应用程序。因此,为了调查你的问题,我们必须深入研究这个问题。在那里,您将注意到一个名为的页面事件。您知道,这是在渲染事件之前调用的。在该事件中,页面将显示给最终用户。因此,默认情况下,呈现页面后所做的任何更改都不会保存到ViewState中。由于您的下拉列表在SaveStateComplete期间为空,因此回发后您将获得空下拉列表

解决方案是在自定义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();
        }
    }

您可能必须按照要求执行强制转换。

我猜您必须将下拉内容保存在会话变量中,并在加载事件期间重新填充它。是的,我有一个想法,但奇怪的是,我有一个类似的另一个页面,我正在执行相同的任务,只是没有下拉,而是有一个复选框,但在页面加载时它不会变为空。我尝试了viewstate,但也没有成功,最后我使用了静态变量,这似乎有效,但我仍然无法获得下拉列表中选择的值,因为当任何人更改下拉列表中的值时,页面回发,按照循环,再次执行页面加载并重新绑定下拉列表,因此我从未获得selectedValue,是否有任何可能的方法可以获得selectedValue。