2011-09-13 19 views
0

我有一個文本框在我用作搜索框的主頁上。當用戶按下Enter時,我想用url參數中的搜索條件重定向到其他頁面。response.redirect在page_load的頁面上不起作用

麻煩它似乎只對沒有自己的page_load潛艇的頁面有效。

  <div id="search-bar"> 
       <asp:TextBox ID="txtSearch" runat="server" Text=""></asp:TextBox> 
       <asp:Button ID="btnSearch" runat="server" style="display:none"/> 
      </div> 

在母版的Page_Load:

txtSearch.Attributes.Add("onKeyDown", "do_search(this)") 

javascript函數,這樣,當用戶按下輸入調用btnSearch_Click

function do_search() { 
     if (event.keyCode == 13) { 
      var invisibleButton = document.getElementById('<%=btnSearch.ClientID %>'); 
      __doPostBack(invisibleButton.name, ''); 
     } 
    } 


Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click 
    If Trim(txtSearch.Text) <> "" Then 
     Response.Redirect("viewall.aspx?q=" & txtSearch.Text, True) 
    End If 
End Sub 

它僅適用於不具有的Page_Load頁面即response.redirect不會在帶有page_load的頁面上觸發。

任何想法?

回答

1

好的,感謝上面的答案,但似乎沒有工作。我終於通過這篇文章解決了這個問題......它似乎是一個神祕的問題,並且與瀏覽器相關。

http://www.pcreview.co.uk/forums/response-redirect-not-working-pressing-enter-key-t2888253.html

3日下跌後:

「我又試圖包裝一 面板中的控制和設置小組DefaultButton而且似乎得到它 在IE工作。」

我的頁面現在如下:

   <asp:Panel ID="Panel1" runat="server" DefaultButton="btnSearch"> 
        <asp:TextBox ID="txtSearch" runat="server" Text=""></asp:TextBox> 
        <asp:Button ID="btnSearch" runat="server" Style="display: none" /> 
       </asp:Panel> 

...和它的作品!最後。

+0

設置DefaultButton屬性只需將JavaScript添加到頁面來執行form.submit。我很高興它的工作,但window.location方法也必須工作,否則我會放棄喝酒。 – Icarus

1

你可以避免整個去服務器和重定向。你可以簡單地這樣做:

function do_search() { 
     if (event.keyCode == 13) { 
      var textbox = document.getElementById('<%=txtSearch.ClientID%>'); 
      if(textbox!=null) 
      window.location('viewall.aspx?q='+textbox.value); 
     } 
    } 
+0

啊,好想法。 –

+0

KISS方法FTW! –

+0

是的,我嘗試過,它仍然停留在同一頁...不可信。 – thegunner

0

您可以嘗試使用RaisePostBackEvent方法,只要使用__doPostBack被調用。

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument) 
{ 
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument); 

    if (source == btnSearch) 
    { 
     Response.Redirect("..."); 
    } 
} 
相關問題