Как вы добавляете аргументы в PostBackUrl кнопки ASP?
Вопрос
На данный момент я создаю страницу поиска с текстовым полем и кнопкой и, вероятно, выпадающим списком для последующей фильтрации результатов.У меня есть PostBackUrl моей кнопки, установленный на моей странице поиска (~/search.aspx).Есть ли простой способ передать значение из текстового поля на страницу поиска?
Решение
Если у вас на кнопке установлен PostBackUrl, то поле поля поиска на вашей первой странице и любые другие поля формы на этой странице уже будут размещены на вашей странице поиска.Хитрость заключается в получении доступа к ним в коде для вашей страницы search.aspx.
if (Page.PreviousPage != null)
{
TextBox SourceTextBox =
(TextBox)Page.PreviousPage.FindControl("TextBox1");
if (SourceTextBox != null)
{
Label1.Text = SourceTextBox.Text;
}
}
Это один из способов.Также есть несколько ярлыков, например, использование директивы PreviousPageType в верхней части вашей страницы search.aspx:
<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
Более подробную информацию о том, как использовать этот, а также первый метод, можно найти здесь:
Другие советы
возможно, вы сможете использовать useSubmitBehavior="true" и ввести метод ="get" в форму.таким образом, он будет использовать поведение отправки браузерами и добавит значения текстового поля к строке запроса
Вы также могли бы использовать некоторый JavaScript для достижения этой цели, перехватывая событие нажатия клавиши Enter в поле textbox.Вы могли бы расширить это поле, чтобы также выполнить проверку текста в текстовом поле.(В этом примере используется 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;
}
});
});
Решена проблема, предыдущая страница - "default.aspx", однако элемент управления не находится на этой странице.Поскольку я использую мастер-страницы, я должен выбрать Мастер вместо того , чтобы Предыдущая страница.
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, извините):
Получите значение из текстового поля через codebehind и просто установите postbackurl для элемента управления следующим образом:
dim textval = SourceTextBox.text
dim myparam = "George"
searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam
Вы можете просто поместить это в функцию, которая обрабатывает нажатие кнопки, не так ли?