ASP.NET: Leggendo i valori delle variabili dei form nella pagina di azione del modulo di ricerca
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
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.