2010-02-15 8 views
10

Ich poste eine einfache Aktion.sollte Formcollection auf asp.net leer sein mvc GET Anfrage

public void Login(FormCollection formCollection) 
{ 
    ... 
} 

Auch mit wenigen Abfragezeichenfolgeflag Werte, die formcollection.Count ist . Ist es durch Verhalten?

+2

Wenn Ihre Aktion wirklich "einfach" ist, warum erklären Sie nicht einfach Aktionsargumente für jede Variable, die Sie voraussichtlich übergeben werden? Das MVC-Framework bindet diese Variablen automatisch für Sie, was bedeutet, dass (1) es funktioniert, unabhängig davon, ob die Variable in der Route, der URL oder den Formulardaten übergeben wird, und (2) es Ihren Code viel leichter lesbar macht , verstehen und testen. In den meisten Fällen ist die Übergabe von "FormCollection" an ein Argument ein Anti-Pattern und sollte vermieden werden. –

+0

@Seth - Was ist, wenn die Methode ein Ajax-Request-Handler ist? In diesem Fall würde ich lieber einen richtigen Json (new {success = false, errorMsg = "..."}) als die ASP.NET-Fehlerseite zurückgeben, wenn der Parameter fehlerhaft ist oder fehlt. –

Antwort

12

FormCollection verwendet POST-Werte und nicht das, was in der Abfragezeichenfolge enthalten ist. Ihre Aktion sollte aussehen:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Login(FormCollection formCollection) 
{ 
    ... 
} 
+0

Danke. Ich versuche Request Objekt zu vermeiden. – Adeel

+0

Wie würde dies mit http get? Ich möchte die Werte in der URL beibehalten, damit ein Benutzer die Ergebnisse einer Suche speichern kann – Chev

+3

@Chev, verwenden Sie 'Request [" paramName "]' mit GET-Anforderungen. –

Verwandte Themen