2008-11-03 6 views
0

J'ai déjà posé une question similaire, mais je ne comprenais pas très bien le problème que je rencontrais. Mon problème est que je ne peux pas obtenir les données d'un TextBox résidant sur le maître lorsque la page change. Voici ce qui se passe:Passage de données de formulaire de la page maître à d'autres pages ASP.NET

  1. MasterPage avec TextBox et Button.
  2. Les données sont saisies dans le TextBox et le bouton est cliqué.
  3. L'action de formulaire est définie sur search.aspx, la webapp y navigue.
  4. Cette fonction obtient le contenu de TextBox:

Public Function oSearchString(ByVal oTextBoxName As String) As String 
    If Master IsNot Nothing Then 
     Dim txtBoxSrc As New TextBox 
     txtBoxSrc = CType(Master.FindControl(oTextBoxName), TextBox) 
     If txtBoxSrc IsNot Nothing Then 
      Return txtBoxSrc.Text 
     End If 
    End If 
    Return Nothing 
End Function 

Lorsque ce code est exécuté, il retourne "", bien qu'il y ait texte entré dans la boîte. J'ai essayé de mettre une valeur par défaut dans la boîte, et cela est passé juste bien (c'est-à-dire <asp:TextBox ID="searchbox" runat="server" text="searchbox"></asp:TextBox> donne "searchbox").

Maintenant que j'ai envoyé le formulaire de recherche à partir de la page d'accueil, je suis sur la page de recherche (search.aspx). Si j'entre à nouveau la chaîne de recherche, le code renvoie tout ce que je mets dans la zone de texte. J'ai essayé de modifier le code ci-dessus de Master à PreviousPage mais cela n'a pas fonctionné du tout puisque le contrôle de zone de texte réside sur la page maître.

J'espère que j'ai bien exposé les informations de base, faites-moi savoir si des éclaircissements sont nécessaires.


EDIT: L'utilisation Request.Form("searchbox") donne Nothing. J'ai inspecté l'objet Request.Form() et j'ai trouvé que l'ID de ma zone de texte est en réalité ctl00$searchbox. L'utiliser comme ID ou son index (3 dans ce cas) me donne le bon résultat. Serait-il préférable de réécrire la fonction pour vérifier toutes les clés dans Request.Form() pour les clés contenant searchbox, ou est-il possible d'obtenir l'ID réel de la zone de texte? Pour la première option, ce que je suis venu avec:

Public Function oSearchString(ByVal oTextBoxName As String) As String 
    For Each oKey As String In Request.Form.AllKeys 
     If oKey.Contains(oTextBoxName) Then 
      Return Request.Form(oKey) 
     End If 
    Next 
    Return "" 
End Function 

Répondre

2

Pour la valeur à charger la page dans le contrôle, vous devez être à l'intérieur d'un postback, donc la raison pour laquelle cela fonctionne lors de la publication de la recherche page. Pour obtenir la valeur lorsque l'entrée provient d'autres zones, vous devez utiliser Request.Form ("Element") pour obtenir la valeur du formulaire envoyé. Si c'est la façon dont vous devez aller, assurez-vous de connaître l'identifiant de la boîte de recherche et vous devriez aller bien.

Questions connexes