我在一个指标屏幕上工作,该屏幕将根据数据库中的不同组显示几个图表。它的一部分使用了一个隐藏所选图表的函数,直到用户单击以显示它们。
问题是:我在下拉列表中使用了Databind,所以每次我选择一个新组时,页面都会刷新,所有内容都会返回到默认状态。
我的问题是:有没有办法避免每次从下拉列表中选择一个新选项时都刷新页面?如果是这样的话,是怎么做的?如果没有,有没有更好的方法来创建dropdownlist并将值附加到它?如果我将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;
}发布于 2012-11-17 04:43:10
尝试使用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。
发布于 2012-11-17 04:55:35
我认为问题在于您正在重新绑定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...
}
}https://stackoverflow.com/questions/13423874
复制相似问题