Question

Je construis une page de recherche avec une zone de texte et un bouton pour le moment, et probablement une liste déroulante pour filtrer les résultats ultérieurement. Le bouton PostBackUrl de mon bouton est défini sur ma page de recherche (~ / search.aspx). Existe-t-il un moyen simple de transmettre la valeur de la zone de texte à la page de recherche?

Était-ce utile?

La solution

Si le bouton PostBackUrl est défini sur votre bouton, le champ du champ de recherche de votre première page et tous les autres champs de formulaire de cette page sont déjà publiés sur votre page de recherche. Le truc est d’y avoir accès dans le code-behind de votre page search.aspx.

if (Page.PreviousPage != null)
{
    TextBox SourceTextBox = 
        (TextBox)Page.PreviousPage.FindControl("TextBox1");
    if (SourceTextBox != null)
    {
        Label1.Text = SourceTextBox.Text;
    }
}

C'est un moyen. Il existe également certains raccourcis, tels que l’utilisation de la directive PreviousPageType en haut de votre page search.aspx:

<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 

Plus de détails sur l'utilisation de cette méthode, ainsi que sur la première méthode, sont disponibles ici:

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

Autres conseils

vous pourrez peut-être utiliser useSubmitBehavior = " true " et mettez une méthode = " get " Sur le formulaire. De cette façon, il utilisera le comportement de soumission des navigateurs et ajoutera les valeurs de la zone de texte à la chaîne de requête

Vous pouvez également utiliser du code JavaScript pour y parvenir en capturant l’événement touche Key dans le champ de la zone de texte. Vous pouvez le développer pour valider également le texte dans la zone de texte. (Cet exemple utilise 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;
        }
    });
});

Problème résolu, la page précédente est "default.aspx", mais le contrôle ne réside pas sur cette page. Depuis que j'utilise des pages maîtres, je dois sélectionner Master plutôt que Page précédente .

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>

Je ne sais pas pourquoi vous obtiendriez une référence null dans ce code, sans l'aide de mon non-savoir VB, mais je vais essayer d'apporter une légère modification que vous pourrez peut-être essayer.

Je sais que FindControl renvoie le type Control. Peut-être pouvez-vous attendre pour le placer dans un type spécifique.

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>

Qu'en est-il de ceci (vb, désolé):

Obtenez la valeur de la zone de texte via codebehind, et définissez simplement le postbackurl sur le contrôle comme suit:

dim textval = SourceTextBox.text
dim myparam = "George"

searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam

Vous pouvez simplement mettre cela dans la fonction qui gère le clic du bouton, non?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top