我有一个占位符,其中包含一些下拉列表和一个按钮,现在这个占位符最初是隐藏的,当用户在页面上进行任何搜索时,基于占位符可见并且下拉列表被填充,这是完全正常的
现在,当我点击占位符内的按钮(下拉列表旁边)时,问题就开始了,此时,所有下拉列表都变为空白。我理解第一页加载执行并且因为没有绑定(因为下拉列表在搜索点击时被绑定)它会使它变为空白,但是一旦下拉列表被绑定,我就没有得到为什么页面加载解除绑定的重要性。这是我的代码:
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,但它仍然没有任何区别。
任何人都可以建议我哪里会出错。
答案 0 :(得分:0)
解决方案是在您的自定义ViewState中强制保存DataSource。对于前者在按钮单击中,添加以下内容:
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();
}
}
您可能必须按照要求执行投射。