我正在开发一个指标屏幕,该屏幕将根据数据库中的不同组显示多个图表。它的一部分使用隐藏选定图表的功能,直到用户点击显示它们。
问题在于:我在下拉列表中使用了Databind,因此每次选择新组时,页面都会刷新,并且所有内容都会返回其默认状态。
我的问题是:每次从下拉列表中选择新选项时,有没有办法可以避免刷新页面?如果是这样,怎么样?如果没有,是否有更好的方法来创建下拉列表并为其附加值?如果我将AppendDataBoundItems
设置为false
,那么我总是将所选值作为列表中的第一项。
以下是我的下拉列表代码:
<asp:DropDownList ID="MinistryDropdown" OnSelectedIndexChanged="Selection_Change" AutoPostback="true" AppendDataBoundItems="true" runat="server"/>
然后C#代码就是这样:
public void Page_Load(object sender, EventArgs e){
MinistryDropdown.DataSource = CreateDataSource();
MinistryDropdown.DataTextField = "Description";
MinistryDropdown.DataValueField = "Description";
MinistryDropdown.DataBind();
...other code here...
}
ICollection CreateDataSource(){
DataTable Ministries = new DataTable();
Ministries = oDatabase.GetData(@"SELECT DISTINCT B.Description
FROM tblInvolvement AS A LEFT JOIN tblMinistries AS B
ON A.Activity = B.MinistryID");
DataView dv = new DataView(Ministries);
return dv;
}
答案 0 :(得分:1)
尝试使用ASP.NET UpdatePanel。只需将DropDownList包装在其中,它应该可以正常工作。这是一个我没有测试的快速示例。
<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="MinistryDropdown" OnSelectedIndexChanged="Selection_Change" AutoPostback="true" AppendDataBoundItems="true" runat="server"/>
</ContentTemplate>
</asp:UpdatePanel>
最后,您很快就会发现此解决方案的限制,稍后您可能更愿意使用Javascript。
答案 1 :(得分:0)
我认为问题在于您重新绑定了Page_Load上的数据,但是您没有检查!IsPostBack
换句话说,您的代码应如下所示:
public void Page_Load(object sender, EventArgs e){
if(!IsPostBack)
{
MinistryDropdown.DataSource = CreateDataSource();
MinistryDropdown.DataTextField = "Description";
MinistryDropdown.DataValueField = "Description";
MinistryDropdown.DataBind();
...other code here...
}
}