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?

È stato utile?

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:

http://msdn.microsoft.com/en-us/library/ ms178139.aspx

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top