ASP.NET: Leggendo i valori delle variabili dei form nella pagina di azione del modulo di ricerca

StackOverflow https://stackoverflow.com/questions/1393163

  •  21-09-2019
  •  | 
  •  

Domanda

Ho un sito web dove voglio implementare la ricerca functionality.So ho aggiunto il codice qui sotto per avere una casella di ricerca nella mia pagina html

   <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>

in Results.aspx, voglio leggere l'utente valore è inserito nella casella di testo txtSearchKey. Qual è il modo ideale per fare questo? Ho usato

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

Ma è un'eccezione di riferimento null. Si prega di consulenza

Non voglio avere tutte le pagine in ASP.NET.I vuole avere un'unica pagina risultato come ASP.NET

Grazie in anticipo

È stato utile?

Soluzione

potrebbe essere perché non si dispone di un nome l'attributo sul campo di testo. Questo è il valore che viene utilizzato come chiave della collezione Request.Form. Non sarà presentato un campo di input senza un attributo name, credo.

ad es .:

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

Altri suggerimenti

È possibile ottenere il vostro campo txtSearchKey da questo:

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

Ma, invece di utilizzare l'azione modulo per inoltrare la ricerca a un'altra pagina, è possibile utilizzare un pulsante con la proprietà PostBackUrl così:

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

Perché in ASP.NET, di avere più di un modulo non è permesso.

C'è qualche motivo non si utilizza

forma runat = "server"

e quindi trascinare un TextField e un pulsante in questa forma. Poi doppio clic sul pulsante e scrivere il codice che si desidera.

Se si vuole fare a modo tuo è necessario dare un nome = "txtMySearchKey" la vostra s per farlo funzionare

Il modo in cui si sta andando di cose non è davvero il modo di lavorare nei moduli web ASP.NET. Il modo migliore è quello di utilizzare i controlli server ASP.NET e gli eventi di astrarre il processo che si sta cercando di ottenere. Per esempio, il modulo dovrebbe davvero essere qualcosa di simile (si noti l'attributo runat = "server" che consente di fare riferimento i controlli a livello di programmazione):

<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>

Poi, nel codice dietro si gestisce l'evento ButtonSubmit_Click come questo per consentire di ottenere il valore dalla casella di testo TxtSearchKey:

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

Si veda l'esempio Quickstart per il controllo TextBox per maggiori informazioni.

Basta non utilizzare .toString () dopo la Request.Form ... sarà non dare un riferimento null dopo.

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