C# 避免刷新数据绑定的Dropdownlist

C# 避免刷新数据绑定的Dropdownlist,c#,asp.net,data-binding,C#,Asp.net,Data Binding,我正在开发一个度量屏幕,该屏幕将根据数据库中的不同组显示多个图表。它的一部分使用了一个函数,该函数隐藏选定的图表,直到用户单击以显示它们 问题是:我在dropdownlist上使用一个数据绑定,因此每次我选择一个新组时,页面都会刷新,所有内容都会返回其默认状态 我的问题是:是否有一种方法可以避免每次从下拉列表中选择新选项时刷新页面?如果是,怎么做?如果没有,是否有更好的方法来创建dropdownlist并将值附加到它?如果我将AppendDataBoundItems设置为false,那么我总是将

我正在开发一个度量屏幕,该屏幕将根据数据库中的不同组显示多个图表。它的一部分使用了一个函数,该函数隐藏选定的图表,直到用户单击以显示它们

问题是:我在dropdownlist上使用一个数据绑定,因此每次我选择一个新组时,页面都会刷新,所有内容都会返回其默认状态

我的问题是:是否有一种方法可以避免每次从下拉列表中选择新选项时刷新页面?如果是,怎么做?如果没有,是否有更好的方法来创建dropdownlist并将值附加到它?如果我将AppendDataBoundItems设置为false,那么我总是将所选值作为列表中的第一项

以下是我的下拉列表代码:

    <asp:DropDownList ID="MinistryDropdown" OnSelectedIndexChanged="Selection_Change" AutoPostback="true" AppendDataBoundItems="true" runat="server"/>

尝试使用ASP.NET更新面板。只要把你的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。

我认为问题在于您正在重新绑定页面加载上的数据,但您没有检查是否!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...
   }
}

如果您担心页面刷新,请使用ajax。我会尝试一下,谢谢。我可能有点偏离目标,但问题是您没有If!我回来了?听起来你是说一切都会恢复,但你不想,对吧?没错。但是,如果我使用它,所有其他的图表都会消失。好吧,我这样做了,但是现在图表没有更新。我对代码进行了调试,c运行良好。当我更改下拉选择时,它会获得所有正确的值,但图表不会显示更改。我觉得我错过了一些简单的东西。但是,它让隐藏的区域保持隐藏,所以谢谢你。我将从这里开始计算,可能会使用JS或尝试与C不同的方式。您是否也尝试将图表放入UpdatePanel?我之前确实尝试过,但当我在dropdownlist上选择一个新值时,我的图表消失了。我不太熟悉ASP,所以我可能构建的整个东西都错了。
public void Page_Load(object sender, EventArgs e){
   if(!IsPostBack)
    {
       MinistryDropdown.DataSource = CreateDataSource();
       MinistryDropdown.DataTextField = "Description";
       MinistryDropdown.DataValueField = "Description";
       MinistryDropdown.DataBind();

      ...other code here...
   }
}