尽管autopostback为true,但Asp.net OnSelectedIndexChanged事件未启动

本文关键字:OnSelectedIndexChanged net 事件 启动 Asp autopostback true 尽管 | 更新日期: 2023-09-27 18:20:04

好的,我有一些我正在构建的网站的代码。我有一个数据绑定到SqlDataSource的列表框。选中时,它应该生成一个SQL查询,更新''筛选页面中其他位置的不同列表框。我试过测试它,只是为了让它更改标签的文本,但这根本不起作用。这是我的一些代码:

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
        <%--register triggers for Partial postback --%>
          <Triggers>
            <asp:AsyncPostBackTrigger ControlID="showbutton" EventName="Click" />
            <asp:AsyncPostBackTrigger ControlID="viewapps" EventName="Click" />
          </Triggers>
          <ContentTemplate>
      <%--- the controls in their rows and columns --%>
            <%--column 1 --%>
     <asp:Label runat="server" ID="TESTER">Text</asp:Label>
     <asp:Panel runat="server" CssClass="column1">
         <asp:Panel ID="Panel1" runat="server" CssClass="row1">
             <%-- Make Panel --%>
                     <span style="padding:8px; position:relative;">
                         <asp:Label ID="label1" runat="server" Text="Make" Font-Size="Large" ></asp:Label>    
                         <asp:Listbox ID="MakeList" runat="server" Width="166px" SelectionMode ="Multiple" DataSourceID="MakeSource" DataTextField="MakeName" AutoPostBack="true"  DataValueField="MakeID" OnSelectedIndexChanged="UpdateModels">
                         </asp:Listbox>
                      </span>
                      <asp:SqlDataSource ID="MakeSource" runat="server" ConnectionString="<%$ ConnectionStrings:VCDBConnectionString %>" ></asp:SqlDataSource>
         </asp:Panel>

现在在我的C#代码背后,我有这个:

   public void UpdateModels(object sender, EventArgs e)
    {
        //build a string for a SQL query for the Models
        string newQuery = "SELECT M.[ModelID], M.[ModelName] FROM Model M INNER JOIN BaseVehicle BV ON BV.ModelID = M.ModelID Where BV.MakeID= '";
        string test = "";
        foreach (ListItem li in MakeList.Items)
        {
            //add each piece of the selected text to the string
            if (li.Selected)
            {
                test += li.Value;
                test += "' AND BV.MakeID= '";

            }
            int cleanup = test.LastIndexOf("' AND BV.MakeID= '");
            test.Remove(cleanup-19,cleanup);
            //ScriptManager.RegisterStartupScript(this, GetType(), "ServerControlScript", "alert('" + test + "');", true);
            TESTER.Text = test;
        }

但测试仪仍然并没有更新。即使AutoPostBack=true,即使整个事情都包含在更新面板中=(我需要一些人帮我弄清楚这个。如果有其他建议,我也将不胜感激。我很乐意提供您可能需要的任何其他信息,请在评论中告诉我。

尽管autopostback为true,但Asp.net OnSelectedIndexChanged事件未启动

String.remove并不像我想象的那样工作。这导致了一个运行时异常,直到我进行调试后才出现,这就是为什么TESTER的文本没有得到更新的原因。

我能够以不同的方式解决我的问题。

我没有立即构建字符串并尝试棘手的字符串操作,而是将每个字符串放入一个列表中,然后删除最后一个字符串的最后一项。一旦我有了完美的列表,我就把它添加到字符串中。

在代码中,它看起来像这样:

      List<string> queryBuilder = new List<string>();
     //add the seleted items to items in the list
            foreach (ListItem li in MakeList.Items)
            {
                if (li.Selected)
                {
                    queryBuilder.Add(li.Value);                 
                    queryBuilder.Add("' OR BV.MakeID = '");

                    //build the list of selected makes for later use
                    selectedMakes.Add(li.Value);
                }
            }
                try
                {
                    //remove the last  ' AND BV.MakeID= '
                    queryBuilder.RemoveAt(queryBuilder.Count-1);
                   //add back the ' and the orderby
                    queryBuilder.Add("'");
                    queryBuilder.Add(" ORDER BY [ModelName]");
                    //build the string
                    foreach(string s in queryBuilder){
                        newQuery+= s;
                    }

                    //debug for visibilty 
                    TESTER.Text =newQuery;