我该如何重定向?

时间:2011-02-09 19:15:23

标签: c# .net asp.net visual-studio

我有一个超链接的图像。单击图像后,如何从服务器端访问“搜索重定向”功能以进行重定向?

<input id="textSearch" runat="server" name="textSearch" type="text" />
<asp:HyperLink id="searchButton" runat="server"> 
       <img alt="" src="images/SearchButton.png"/>
</asp:HyperLink>

protected void searchRedirect()
{
    Response.Redirect("/NewProject/Home/?searchString=" + textSearch.Value;
}

3 个答案:

答案 0 :(得分:5)

您需要使用LinkBut​​ton并聆听其Click event

,而不是HyperLink。
<input id="textSearch" runat="server" name="textSearch" type="text" />
<asp:LinkButton id="searchButton" runat="server" OnClick="searchRedirect"> 
       <img alt="" src="images/SearchButton.png"/>
</asp:LinkButton>

protected void searchRedirect(sender As Object, e As EventArgs)
{
    Response.Redirect("/NewProject/Home/?searchString=" + textSearch.Value);
}

Al Kepp建议以这种方式执行此操作会导致页面仅回发以实现重定向,从而导致不必要的页面加载。如下所示的javascript版本将避免第一篇文章回复:

<input id="textSearch" runat="server" name="textSearch" type="text" />
<a href="#" onclick="window.location='/NewProject/Home/?searchString=' + getElementById('textSearch').value; return false;">
       <img alt="" src="images/SearchButton.png"/>
</a>

我实际上并未测试该代码,但我认为我没有任何拼写错误。

答案 1 :(得分:1)

要么用JavaScript编写,因为它是如何在客户端执行该代码的唯一方法。这是使其完全按照您的意愿工作所必需的。

或使用LinkBut​​ton作为Nick Spiers说。在这种情况下,您将不会在url地址中看到testSearch.Value。 (这通常很好,但是如果你想在那里看到它,你可以做的最好就是用JavaScript编写它。)但是与Nick Spier的代码不同,我会在那里省略重定向命令并立即执行所需的搜索操作。 (因为重定向会导致向客户端发送两个页面,这不是用户在按下搜索按钮时通常所期望的。)

答案 2 :(得分:0)

或者你可以使用javascript并摆脱额外的往返服务器。这是一个使用jQuery的例子

<input id="textSearch" class="textSeachClass" runat="server" name="textSearch" type="text" />
<asp:HyperLink id="searchButton" CssClass="searchButtonClass" runat="server"> 
        <img alt="" src="images/SearchButton.png"/>
</asp:HyperLink>

<script type="text/javascript">
    // This code should be put in a separate .js-file so it can 
    // be cached and the aspx page will be more SEO-friendly
    $("a.searchButtonClass").click(function (e) {
        e.preventDefault();
        window.location = "/NewProject/Home/?searchString=" + $("input.textSeachClass").val();
    });
</script>

我使用css类作为选择器,因为ASP.Net Webforms将在渲染时更改控件的客户端ID,除非您使用.Net Framework 4。