Mam kontroler MVC, który ma tę metodę akcji:
[HttpPost]
public ActionResult SubmitAction()
{
// Get Post Params Here
... return something ...
}
Formularz to nietrywialny formularz z prostym polem tekstowym.
Pytanie
Jak uzyskać dostęp do wartości parametrów?
Nie publikuję z widoku, wpis jest wysyłany zewnętrznie. Zakładam, że istnieje zbiór par klucz / wartość, do których mam dostęp.
Próbowałem, Request.Params.Get("simpleTextBox");
ale zwraca błąd „Przepraszamy, wystąpił błąd podczas przetwarzania żądania”.
asp.net
asp.net-mvc-3
http-post
Richard
źródło
źródło
Po prostu możesz użyć
FormCollection
:Możesz również użyć klasy, która jest zamapowana za pomocą wartości formularza, a aparat asp.net mvc automatycznie wypełnia ją:
źródło
Odpowiedzi są bardzo dobre, ale w najnowszej wersji MVC i .NET jest inny sposób, z którego bardzo lubię korzystać, zamiast „starej szkoły” kluczy FormCollection i Request.
Rozważmy fragment kodu HTML zawarty w tagu formularza, który wykonuje AJAX lub FORM POST.
Twój kontroler faktycznie przeanalizuje dane formularza i spróbuje dostarczyć je jako parametry zdefiniowanego typu. Dodałem pole wyboru, ponieważ jest to trudne. Zwraca tekst „on”, jeśli jest zaznaczony i pusty, jeśli nie jest zaznaczony. Wymóg jest jednak taki, że te zdefiniowane zmienne MUSZĄ istnieć (chyba że dopuszczają wartość null (pamiętaj, że
string
dopuszcza wartość null)), w przeciwnym razie AJAX lub POST back nie powiedzie się.Możesz także odesłać model bez korzystania z pomocy maszynki do golenia. Zdałem sobie sprawę, że czasami jest to potrzebne.
Znaczniki HTML będą po prostu ...
a twój kontroler (Razor Engine) przechwyci zmienną Form Variable „variableName” (nazwa jest taka, jak chcesz, ale zachowaj spójność) i spróbuje ją zbudować i przesłać do MyModel.
Kiedy kontroler oczekuje modelu (w tym przypadku HomeModel), nie musisz definiować WSZYSTKICH pól, ponieważ parser po prostu pozostawi je domyślne, zwykle NULL. Fajną rzeczą jest to, że możesz mieszać i dopasowywać różne modele w Mark-up, a analiza zwrotna posta zapełni się jak najwięcej. Nie musisz definiować modelu na stronie ani używać żadnych pomocników.
Używanie
List<>
jest nieco bardziej złożone pod względem marży.Indeks na liście <> MUSI być zawsze liczony od zera i sekwencyjny. 0,1,2,3.
Korzystanie
IEnumerable<>
z niezerowych i niesekwencyjnych indeksów odesłanych. Musimy dodać dodatkowe ukryte dane wejściowe, aby pomóc segregatorowi.A kod musi po prostu używać IEnumerable i call
ToList()
Zaleca się użycie pojedynczego modelu lub modelu widoku (model zawierający inne modele do tworzenia złożonego modelu widoku) na stronę. Proponowane mieszanie i dopasowywanie można uznać za złą praktykę, ale dopóki działa i jest czytelne, nie jest ZŁE. Pokazuje jednak moc i elastyczność silnika Razor.
Więc jeśli chcesz wrzucić coś arbitralnego lub zastąpić inną wartość z pomocnika Razor, lub po prostu nie masz ochoty tworzyć własnych pomocników, dla pojedynczego formularza, który używa nietypowej kombinacji danych, możesz szybko użyć tych metod, aby zaakceptować dodatkowe dane.
źródło
Jeśli chcesz uzyskać dane formularza bezpośrednio z żądania HTTP, bez żadnych powiązań modelu lub
FormCollection
możesz użyć tego:źródło
Request
i wstrzyknąć ją do metody.