Come si aggiungono argomenti a un pulsante ASP PostBackUrl?
Domanda
Sto costruendo una pagina di ricerca con una casella di testo e un pulsante per ora, e probabilmente un menu a discesa per filtrare i risultati in seguito. Ho PostBackUrl del mio pulsante impostato sulla mia pagina di ricerca (~ / search.aspx). C'è un modo semplice per passare il valore nella casella di testo alla pagina di ricerca?
Soluzione
Se hai PostBackUrl impostato sul tuo pulsante, il campo della casella di ricerca nella tua prima pagina e tutti gli altri campi del modulo in quella pagina sono già pubblicati nella tua pagina di ricerca. Il trucco è accedervi nel code-behind per la tua pagina search.aspx.
if (Page.PreviousPage != null)
{
TextBox SourceTextBox =
(TextBox)Page.PreviousPage.FindControl("TextBox1");
if (SourceTextBox != null)
{
Label1.Text = SourceTextBox.Text;
}
}
Questo è un modo. Esistono anche alcune scorciatoie, come l'utilizzo della direttiva PreviousPageType nella parte superiore della pagina search.aspx:
<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
Maggiori dettagli su come usarlo, così come il primo metodo, sono disponibili qui:
Altri suggerimenti
potresti essere in grado di utilizzare useSubmitBehavior = " true " e metti un metodo = " get " nel modulo. in questo modo utilizzerà i comportamenti di invio dei browser e aggiungerà i valori delle caselle di testo alla stringa di query
Puoi anche usare un po 'di JavaScript per farlo catturando l'evento Invio tasto premuto nel campo della casella di testo. È possibile espanderlo per eseguire anche la convalida del testo nella casella di testo. (Questo esempio utilizza 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;
}
});
});
Risolto il problema, la pagina precedente è " default.aspx " ;, tuttavia il controllo non risiede su quella pagina. Dato che utilizzo le pagine mastro, devo selezionare Padrone anziché Pagina precedente .
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>
Non ho idea del motivo per cui otterresti un riferimento null in quel codice, nudo con la mia non conoscenza VB, ma proverò a fare una leggera modifica che potresti provare.
So che FindControl restituisce il tipo Control .. forse puoi aspettare di inserirlo in un tipo specifico.
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>
Che dire, questo (vb, scusa):
Ottieni il valore dalla casella di testo tramite codebehind e imposta semplicemente il postbackurl sul controllo in questo modo:
dim textval = SourceTextBox.text
dim myparam = "George"
searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam
Puoi semplicemente inserirlo nella funzione che gestisce il clic del pulsante, no?