2015-05-18 25 views
2

我的代碼在Chrome和Firefox中工作正常,但我的代碼在IE中混亂(因爲IE?)。由於我的工作場所,功能必須在IE中運行。如何保持下拉列表的SelectIndexChanged方法不被觸發?

我有一個下拉列表:

<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> 

with onclick:

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()))); 
} 
+0

Page_Load是什麼樣子的?它是否設置回傳項目? – ahwm

+0

我添加了page_load方法 –

+0

是的,我不確定這一點。問題是隻有IE瀏覽器,我想知道如果IE瀏覽器以某種方式改變下拉列表,但我從來沒有見過這樣做,所以我不知道。 – ahwm

回答

1

您重定向點擊上後的反應標籤。該頁面已重新載入,並且該方法始終會被觸發。但我認爲如果在回發測試中包含所有ddlistCategories_SelectedIndexChanged方法內容,則在頁面重新加載後不會調用它。

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