ASP.NET: Lese bilden Variablenwerte in der Aktionsseite von Suchformular
Frage
Ich habe eine Website, wo ich suchen implementieren möchten functionality.So i die folgenden Code hinzugefügt ein Suchfeld in meinem HTML-Seite zu haben,
<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, ich mag der Wert Benutzer lesen, in dem txtSearchKey Textfeld eingegeben hat. Was ist der ideale Weg, dies zu tun? Früher habe ich
string strKey = Request.Form["txtSearchKey"].ToString();
Aber es eine Null-Referenz-Exception werfen. Bitte Beratung
Ich möchte nicht haben wollen alle Seiten in ASP.NET.I haben nur die Ergebnisseite als ASP.NET
Vielen Dank im Voraus
Lösung
Könnte sein, weil Sie nicht über einen Namen Attribut auf dem Textfeld ein. Das ist der Wert, der als Schlüssel in der Request.Form Sammlung verwendet wird. Ein Eingabefeld ohne Namensattribut wird nicht abgegeben werden, denke ich.
z.B .:
<input id="txtSearchKey" type="text" name="txtSearchKey" />
Andere Tipps
Sie können Ihre txtSearchKey Feld durch diese:
string strKey = PreviousPage.Request.Form["txtSearchKey"].ToString();
Aber anstatt Form Aktion mit Ihrer Suche auf eine andere Seite weitergeleitet werden, Sie auf eine Schaltfläche mit PostBackUrl Eigenschaft wie das verwenden können:
<asp:Button runat="server" ID="btnSearch" PostBackUrl="Search.aspx" />
Da in ASP.NET, hat mehr als eine Form ist nicht erlaubt.
Gibt es einen Grund, warum Sie nicht
verwenden Sieform runat = "server"
und ziehen Sie dann ein Textfield und ein Knopf in dieser Form. Dann doppelklicken Sie auf die Schaltfläche und schreiben Code, den Sie möchten.
Wenn Sie wollen, es zu tun, um Ihre Art und Weise müssen Sie Ihre s einen Namen geben = „txtMySearchKey“ für sie zu arbeiten
Die Art und Weise Sie die Dinge laufen ist nicht wirklich so, wie Sie in ASP.NET Web-Formulare arbeiten. Der bevorzugte Weg ist asp.net Server-Steuerelemente und Ereignisse zu abstrahieren den Prozess, den Sie versuchen zu erreichen, zu verwenden. Zum Beispiel sollte das Formular wirklich so etwas wie diese (man beachte die runat = „server“ -Attribut, dass Sie die Steuerelemente programmatisch verweisen ermöglicht):
<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>
in Ihrem Code dann hinter dir die ButtonSubmit_Click
Veranstaltung wie diese handhaben würde, damit Sie den Wert aus dem TxtSearchKey
Textbox bekommen:
protected void ButtonSubmit_Click(object sender, EventArgs e)
{
string strKey = TxtSearchKey.Text;
}
Sehen Sie das Quickstart Beispiel für das TextBox-Steuerelement für weitere Informationen.
Nur nicht verwenden .toString () nach dem request.form ... es wird keine Nullreferenz danach geben.