2016-06-03 2 views
0

Ich entwickle eine sehr einfache Dateneingabeanwendung (im Bootstrap) mit ASP.net und VB.Net als Code hinter Visual Studio 2012 Web.Request.Form funktioniert nur auf Namens-Tags?

Nehmen wir an, ich die folgende html haben die Vorname zu erhalten:

<form id="form1" runat="server"> 
    <div style="padding:20px"> 
     <div class="form-group"> 
     <label for="firstname">Firstname</label> 
     <input type="text" class="form-control" id="firstname" name="firstname" placeholder="" style="max-width:450px" maxlength="60" /> 
     <small class="text-muted">Enter your first name.</small> 
     </div> 
     <button runat="server" type="submit" class="btn btn-primary" onserverclick="btnSubmit_ServerClick" >Submit</button> 

    </div> 
    </form> 

und den entsprechenden Code hinter seinen Wert zu handhaben:

Protected Sub btnSubmit_ServerClick(sender As Object, e As EventArgs) 
    Dim fname As String = Request.Form("firstname").ToString 
End Sub 

Nehmen wir an, ich will nicht runat="server" verwenden in meinem HTML-Vorname-Feld. Ich sehe, dass funktioniert nur, wenn ich das Tag name="firstname" gesetzt habe. Wenn ich nur das id Tag (und nicht das name Tag) gesetzt habe, berücksichtigt es das nicht; in meinem Fall, wenn ich nur <input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" /> die Request.Form("firstname") auf meiner Serverseite habe, gibt NULL zurück.

Ich versuche auch Request.Form ohne Glück. Ich sehe, dass die Sammlung NameValueCollection von Komponenten gefüllt wird, die nur das name-Tag festgelegt haben.

Und meine Frage ist, ist es möglich, meinen Server-Code zu ändern, um mit HTML-Komponenten arbeiten, die sie nur ihre ID festgelegt haben?

+1

Ich würde empfehlen, zu verwenden [Serversteuer] (https://msdn.microsoft.com/en-us/library/zsyt68f1.aspx) (Textfeld, Schaltfläche, etc.) so dass Sie stark auf ihre Werte zugreifen können. –

+0

Nein, über die Anfragen erhalten Sie nur Namevalue-Paare, die ID ist nicht etwas, das an den Server gesendet wird – Icepickle

+1

@UweKeim Vielen Dank für Ihren Vorschlag. Ich stimme zu, aber meine Frage ist nur für Wissenszwecke, gewährt, dass wir bestehenden Code mit Hunderten von HTML-Feldern auf diese Weise festgelegt haben. –

Antwort

2

Wenn Sie die Verwendung serverseitiger Steuerelemente deaktivieren, verbleibt die Methode zum Anfordern der Werte.

Der hinterstehende Code kann nur die Daten lesen, die an das Back-End gesendet werden. Wenn Sie Ihre Anfrage (die beim Senden des Formulars angeforderte Seite) auf der Registerkarte "Netzwerk" Ihres bevorzugten Browsers überprüfen, finden Sie in einem Abschnitt die gesendeten Daten. Da Sie für dieses Eingabefeld keinen Namen vergeben, werden die Daten NICHT an den Server gesendet. Deshalb können Sie es nicht lesen. Die ID hat keinen Einfluss darauf, was an den Server gesendet wird. Die ID ist nur für die clientseitige Nutzung gedacht. Der Grund, warum es funktioniert, wenn Sie Runat = "server" hinzufügen, liegt daran, dass das Framework Informationen zu dem geheimen verborgenen Eingabefeld namens "__VIEWSTATE" (oder etwas) hinzufügt.

Am Ende, so wie HTML funktioniert, werden beim Senden eines Formulars alle Eingabeelemente in der Form name = wert gesendet und da Sie den Namen weglassen, werden keine Daten gesendet.

Wie die unten stehenden Kommentare empfehlen, sollten Sie die Verwendung der serverseitigen Steuerelemente (runat = "server") in Betracht ziehen oder das Namens-Tag zu Ihren Formularelementen hinzufügen.

Ich weiß, dass viele Leute asp.net Webforms nicht mögen (eigentlich bin ich auch kein Fan), aber es gibt andere Alternativen - eine logische Verschiebung wäre, stattdessen zu asp.net mvc zu wechseln. Was auch immer Sie tun, wenn Sie die Rahmenspezifikationen deaktivieren, müssen Sie den Standard html5 einhalten.

Viel Glück :)

Verwandte Themen