c# - 如何防止触发下拉列表 SelectedIndexChanged 方法?

标签 c# asp.net webforms

我的代码在 Chrome 和 Firefox 中运行良好,但我的代码在 IE 中却一团糟(因为 IE?)。由于我的工作场所,该功能必须在 IE 中运行。

我有一个下拉列表:

<asp:DropDownList ID="ddlistCategories" runat="server" Width="425px" DataSourceID="SqlDataSource1" DataTextField="productLine" DataValueField="productLine" AutoPostBack="True" OnDataBound="ddlistCategories_DataBound"  CssClass="myTextbox" OnSelectedIndexChanged="ddlistCategories_SelectedIndexChanged">

和方法:

protected void ddlistCategories_SelectedIndexChanged(object sender, EventArgs e)
    {

        if ((!IsPostBack && !((DropDownList)sender).SelectedIndex.ToString().Equals("-1")) 
            || (!Request.RawUrl.Contains("?")))
            Response.Redirect(String.Format("default.aspx?searchIndex={0}&selectedBrand={1}",
                HttpUtility.HtmlEncode(((DropDownList)sender).SelectedIndex.ToString()),
                HttpUtility.HtmlEncode(((DropDownList)sender).SelectedValue.ToString())));

    }

我必须创建那个非常丑陋的 if 语句,因为每当我单击此按钮时都会调用 ddlistCategories_SelectedIndexChanged:

<asp:LinkButton ID="btnSubmitItems" runat="server" CssClass="myButton" Text="Search" OnClick="btnSubmitItems_Click"></asp:LinkButton>

通过点击:

 protected void btnSubmitItems_Click(object sender, EventArgs e)
    {
        if (txtItems.Text.Equals(""))
        {
            Session["message"] += "<div class='status-warning'>Must select items!</div>";
            Response.Redirect("default.aspx");
        }
        else
            Response.Redirect(HttpUtility.HtmlEncode("default.aspx?searchIndex=-1")
                + "&searchItems=" + HttpUtility.HtmlEncode(txtItems.Text));

如何让 ddlistCategories_SelectedIndexChanged 被调用,我什至没有调用它?

请求的 Page_Load 方法:

if (IsPostBack == false)
        {
            string[] recs = MyQuery.QueryGetDropDownString(sqlDsItemNums.ConnectionString,
                sqlDsItemNums.SelectCommand).Split('|');
            List<MyListItem> tempRecords = new List<MyListItem>();
            foreach (string rec in recs)
            {
                try
                {
                    tempRecords.Add(new MyListItem(rec.Split((char)252)[1], rec.Split((char)252)[0]));
                }
                catch (Exception ex)
                {
                    lblError.Text = "<div style='color: red'> Error: " + ex.Message + "</div>";
                }
            }
            Session["itemList"] = tempRecords;

        }
        lblStatus.Text = "";

        int cartCount = DownloadCart.GetCount(User.Identity.Name, sqlDsDlCart.ConnectionString);
        if (cartCount > 0)
        {
            checkout.Visible = true;
            checkoutBtn2.Visible = true;
        }
        try
        {
            lblStatus.Text = Session["message"].ToString();
            lblStatus.Visible = true;
            Session["message"] = "";
        }
        catch { }

我受够了,所以我决定让我的 if 语句更丑一点:

protected void ddlistCategories_SelectedIndexChanged(object sender, EventArgs e)
{
    if ((!IsPostBack && !((DropDownList)sender).SelectedIndex.ToString().Equals("-1"))
        || (!Request.RawUrl.Contains("?") && (((DropDownList)sender).SelectedIndex != 0)))
        Response.Redirect(String.Format("default.aspx?searchIndex={0}&selectedBrand={1}",
            HttpUtility.HtmlEncode(((DropDownList)sender).SelectedIndex.ToString()),
            HttpUtility.HtmlEncode(((DropDownList)sender).SelectedValue.ToString())));
}

最佳答案

您在点击该标签后重定向响应。页面已重新加载,该方法将始终被触发。但我认为,如果将所有 ddlistCategories_SelectedIndexChanged 方法内容包围在回发测试中,它不会在页面重新加载后被调用。

protected void ddlistCategories_SelectedIndexChanged(object sender, EventArgs e)
{
    if (!IsPostBack) {
        // ddlistCategories_SelectedIndexChanged code here
    }
}

关于c# - 如何防止触发下拉列表 SelectedIndexChanged 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30310963/

相关文章:

c# - 当目标架构为arm32v7时,azure iot Edge构建失败(在ubuntu中)

c# - 检测 ASP.NET 中的内存泄漏

javascript - 使用 JS/Jquery 的 asp.net 文本框的动态字符数?

c# - 将 ASP.NET 客户端 ID 传递给 javascript 函数

javascript - 是否可以指定要触发的事件?

c# - 从字符串 ascii 转换为字符串 Hex

c# - 文化信息 : Compare including parent

使用Parameters.AddWithValue 返回参数表示的C# 和MySQL 错误

c# - 按钮不想调用方法 (ASP.NET - C#)

asp.net - 有人深入了解 ASP.NET WebFormsMVP 吗?