2009-09-08 10 views
0

J'ai un site Web où je veux mettre en œuvre la recherche functionality.So i ajouté le code ci-dessous pour avoir une boîte de recherche dans ma page htmlASP.NET: formulaire lecture des valeurs variables dans la page d'action de formulaire de recherche

<form id="search" method="post" action="Results.aspx"> 
    <input id="txtSearchKey" type="text" name="txtSearchKey" /> 
    <input id="Submit1" type="submit" value="submit" /><br /> 
    <br /> 
</form> 

dans Results.aspx, je souhaite lire la valeur que l'utilisateur a saisie dans la zone de texte txtSearchKey. Quelle est la manière idéale de faire ceci? J'ai utilisé

string strKey = Request.Form["txtSearchKey"].ToString(); 

Mais il lance une exception de référence nulle. S'il vous plaît conseiller

Je ne veux pas avoir toutes les pages ASP.NET.I veulent avoir la page de résultat comme ASP.NET

Merci à l'avance

+0

Où mettez-vous la ligne de code ci-dessus? – patmortech

Répondre

4

Peut-être parce que vous n'avez pas d'attribut NAME dans le champ de zone de texte. C'est la valeur qui est utilisée comme clé dans la collection Request.Form. Un champ de saisie sans attribut de nom ne sera pas soumis, je pense.

.: par exemple

<input id="txtSearchKey" type="text" name="txtSearchKey" /> 
+0

+1 Oui, je n'ai pas remarqué cet attribut. – Canavar

+0

J'ai ajouté l'attribut de nom aussi.Mais ne fonctionnait pas alors aussi – Shyju

+0

Encore obtenir une exception de référence nulle? En outre, où exactement mettez-vous le code pour récupérer la valeur de formulaire (c'est-à-dire, quel gestionnaire d'événement de page, ou est-il en ligne)? – patmortech

0

Vous pouvez obtenir votre champ txtSearchKey par ceci:

string strKey = PreviousPage.Request.Form["txtSearchKey"].ToString(); 

Mais, au lieu d'utiliser l'action de formulaire pour transmettre votre recherche à une autre page, vous pouvez utiliser un bouton avec la propriété PostBackUrl comme ça:

<asp:Button runat="server" ID="btnSearch" PostBackUrl="Search.aspx" /> 

Parce que dans ASP.NET, avoir plus d'un formulaire n'est pas autorisé.

+0

Je voudrais avoir une seule page ASP.NET qui va afficher les résultats.Je veux avoir le reste des pages en pages HTML – Shyju

+0

alors ma première recommandation vous convient. – Canavar

+0

En fait ce n'est pas le cas. Comme la page précédente est en HTML, la propriété PreviousPage sera vide et cela entraînera une erreur. – patmortech

0

Y at-il une raison quelconque vous n'utilisez pas

forme runat = "server"

puis faites glisser un champ de texte et un bouton sous cette forme. Puis double-cliquez sur le bouton et écrivez le code que vous voulez.

Si vous voulez faire votre chemin, vous devez donner votre nom de sa = « txtMySearchKey » pour que cela fonctionne

0

La façon dont vous allez sur les choses n'est pas vraiment la façon dont vous travaillez dans ASP.NET Web formes. La méthode préférée consiste à utiliser les contrôles et les événements du serveur asp.net pour extraire le processus que vous essayez d'atteindre. Par exemple, votre formulaire doit vraiment être quelque chose comme ceci (notez l'attribut runat = « server » qui vous permet de référencer les contrôles par programme):

<form id="form1" runat="server"> 
    <div> 
     <asp:Panel ID="PanelSearch" runat="server" DefaultButton="ButtonSubmit"> 
      <asp:TextBox ID="TxtSearchKey" runat="server" /><br /> 
      <asp:Button ID="ButtonSubmit" Text="Submit" runat="server" 
       onclick="ButtonSubmit_Click" /><br /> 
     </asp:Panel> 
    </div> 
</form> 

Ensuite, dans votre code derrière vous gérer l'événement ButtonSubmit_Click comme ceci pour vous permettre d'obtenir la valeur de la zone de texte TxtSearchKey:

protected void ButtonSubmit_Click(object sender, EventArgs e) 
{ 
    string strKey = TxtSearchKey.Text; 
} 

Voir la Quickstart example for the TextBox control pour plus d'informations.

+0

Je ne demandais pas un événement de clic de bouton d'une page Web avec une zone de texte. J'ai seulement une page (pour montrer les résultats de recherche) et beaucoup de pages HTML (qui devraient avoir cette boîte de recherche) :) – Shyju

+0

Pourquoi employez asp.net alors, si vous n'allez pas employer ses dispositifs? Ton appel, je suppose ... –

0

N'utilisez pas simplement .toString() après Request.form ... il ne donnera pas une référence nulle après cela.

Questions connexes