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.
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
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ę.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
Możesz także odesłać model bez korzystania z pomocy maszynki do golenia. Zdałem sobie sprawę, że czasami jest to potrzebne.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
Znaczniki HTML będą po prostu ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
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.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
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.
WSKAZÓWKA: Nazwa parametru w kontrolerze to nazwa zdefiniowana w znaczniku HTML „name =”, a nie nazwa modelu, ale nazwa oczekiwanej zmiennej w!
Używanie List<>
jest nieco bardziej złożone pod względem marży.
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
Indeks na liście <> MUSI być zawsze liczony od zera i sekwencyjny. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
Korzystanie IEnumerable<>
z niezerowych i niesekwencyjnych indeksów odesłanych. Musimy dodać dodatkowe ukryte dane wejściowe, aby pomóc segregatorowi.
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
A kod musi po prostu używać IEnumerable i call ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
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.