【发布时间】:2010-09-17 07:29:06
【问题描述】:
我现在正在构建一个带有文本框和一个按钮的搜索页面,可能还有一个下拉菜单来稍后过滤结果。我将按钮的 PostBackUrl 设置为我的搜索页面 (~/search.aspx)。有没有一种简单的方法可以将文本框中的值传递到搜索页面?
【问题讨论】:
我现在正在构建一个带有文本框和一个按钮的搜索页面,可能还有一个下拉菜单来稍后过滤结果。我将按钮的 PostBackUrl 设置为我的搜索页面 (~/search.aspx)。有没有一种简单的方法可以将文本框中的值传递到搜索页面?
【问题讨论】:
您可以使用 useSubmitBehavior="true" 并在表单上放置一个 method="get"。这样它将使用浏览器提交行为并将文本框的值附加到查询字符串
【讨论】:
您还可以使用一些 JavaScript 通过在文本框字段中捕获 Enter 键按键事件来完成此操作。您也可以扩展它以执行文本框中的文本验证。 (本例使用jQuery)
$(document).ready(function(){
// Event Handlers to allow searching after pressing Enter key
$("#myTextBoxID").bind("keypress", function(e){
switch (e.keyCode){
case (13):
// Execute code here ...
break;
default:
break;
}
});
});
【讨论】:
如果您在按钮上设置了 PostBackUrl,则第一页上的搜索框字段以及该页面上的任何其他表单字段都已发布到您的搜索页。诀窍是在您的 search.aspx 页面的代码隐藏中访问它们。
if (Page.PreviousPage != null)
{
TextBox SourceTextBox =
(TextBox)Page.PreviousPage.FindControl("TextBox1");
if (SourceTextBox != null)
{
Label1.Text = SourceTextBox.Text;
}
}
这是一种方式。还有一些快捷方式,例如使用 search.aspx 页面顶部的 PreviousPageType 指令:
<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
有关如何使用它以及第一种方法的更多详细信息,可以在这里找到:
【讨论】:
解决了这个问题,上一页是“default.aspx”,但是控件不在该页上。由于我使用母版页,我必须选择 Master 而不是 PreviousPage。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If PreviousPage IsNot Nothing Then
Dim txtBoxSrc As New TextBox
txtBoxSrc = CType(Master.FindControl("searchbox"), TextBox)
If txtBoxSrc IsNot Nothing Then
MsgBox(txtBoxSrc.Text)
End If
End If
End Sub
<div class="gsSearch">
<asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
<asp:Button ID="searchbutton" runat="server" Text="search"
UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
</div>
【讨论】:
我不知道为什么您会在该代码中得到一个空引用,仅凭我对 VB 的不了解,但我将尝试进行一些您可能可以尝试的轻微修改。
我知道 FindControl 返回的类型是 Control.. 也许您可以等待将其装箱为特定类型。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If PreviousPage IsNot Nothing Then
Dim txtBoxSrc As New Control
txtBoxSrc = PreviousPage.FindControl("searchbox")
If txtBoxSrc IsNot Nothing Then
MsgBox((CType(txtBoxSrc, TextBox)).Text)
End If
End If
End Sub
<div class="gsSearch">
<asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
<asp:Button ID="searchbutton" runat="server" Text="search"
UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
</div>
【讨论】:
怎么样,这个(vb,对不起):
通过代码隐藏从文本框中获取值,然后简单地在控件上设置 postbackurl,如下所示:
dim textval = SourceTextBox.text
dim myparam = "George"
searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam
你可以把它放在处理按钮点击的函数中,不是吗?
【讨论】: