2012-04-02 19 views
0

Ich habe eine Ansicht, die drei Arten zugegriffen werden kann:ASP.NET zulässige Aktionen Benennung?

1. Leere Form - initial get aus einem Menü

[HttpGet] 
public ActionResult GetMe() 

2. Bestücken Form nach einer Form (nach einem Drop-Down-Wert einreichen nach einer Anforderung von einer anderen Seite über Javascript ausgewählt)

[HttpPost] 
public ActionResult GetMe(int firstDropdownValue) 

3. Bestückt ist. Das ist ein GET.

[HttpGet] 
public ActionResult GetMe(int secondDropdownValue, int thirdDropdownValue) 

Das Problem ist, dass # 3 Konflikte mit # 1, da zwei auf die gleiche Action wird nicht erlaubt. Ich könnte # 3 einen anderen Aktionsnamen geben, aber ich würde wirklich gerne beide denselben Namen in der URL anzeigen.

Ich habe am [Action] Attribut gesucht, aber ich glaube nicht, dass mir helfen kann. Gibt es eine Problemumgehung?

+1

Ihr Beispiel wird nicht kompiliert. # 2 und # 3 haben die gleiche Methodensignatur. –

+0

Ich habe # 3 bearbeitet, um die Signatur anders zu machen. Die Parameter sind hier nicht wirklich wichtig. – Dewey

Antwort

0

@ Andrew Barber ist richtig. Vergessen Sie MVC für eine Sekunde, Sie können nicht zwei Methoden mit der gleichen Signatur haben. Sie können zu einem kombiniert werden.

Dies bedeutet natürlich, dass Sie Ihre 3. Option (die JS) ändern müssen, um einen POST anstelle eines GET zu machen. Wenn das ein Problem ist, benötigen Sie eine dritte Aktion mit einer separaten URL.

Obwohl ich vorstellen, nicht ein Szenario, in dem JavaScript ist erforderlich, um „GET“ eine ganze Seite - sollte es nicht ein Kind Aktion seine PartialViewResult Rückkehr?

0

Nachdem Sie den Compiler-Fehler zu beheben, können Sie # 1 und # 3 mit einem Nullable-int kombinieren.

[HttpGet] 
public ActionResult GetMe(int? dropDownValue)