Відповіді дуже хороші, але є ще один спосіб у останньому випуску MVC та .NET, який мені дуже подобається використовувати замість клавіш FormCollection і Request "old school".
Розглянемо фрагмент HTML, який міститься у тезі форми, який або AJAX, або 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?" />
Ваш контролер фактично проаналізує дані форми та спробує доставити їх вам як параметри визначеного типу. Я включив прапорець, тому що це хитро. Він повертає текст "увімкнено", якщо він встановлений, і нуль, якщо не встановлений. Однак, вимога полягає в тому, що ці визначені змінні ОБОВ'ЯЗКОВО існують (якщо тільки нульові (пам’ятайте, хоча це string
є нульовими)), інакше назад AJAX або POST не вдасться.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
Ви також можете опублікувати модель назад, не використовуючи жодної бритви. Я стикався, що це потрібно кілька разів.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
Розмітка HTML просто буде ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
і ваш контролер (двигун Razor) перехопить змінну форми "variaName" (ім'я так, як вам подобається, але зберігайте її послідовно) і спробує створити її та передати в MyModel.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
Коли контролер очікує Модель (в даному випадку HomeModel), вам не потрібно визначати ВСІ поля, оскільки аналізатор просто залишить їх за замовчуванням, як правило, NULL. Приємно те, що ти можеш змішувати та співставляти різні моделі на маркуванні, і синтаксичний синтаксичний аналіз буде заповнено максимально. Вам не потрібно визначати модель на сторінці або використовувати будь-які помічники.
ПОРАДА: Ім'я параметра в контролері - це ім'я, визначене в розмітці HTML "name =" не ім'я Моделі, а ім'я очікуваної змінної у!
Використання List<>
трохи складніше в його розмітці.
<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">
Індекс у списку <> ОБОВ'ЯЗКОВО повинен бути нульовим та послідовним. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
Використання IEnumerable<>
для нульових та не послідовних індексів опублікувати назад. Нам потрібно додати додатковий прихований вхід, щоб допомогти палітурці.
<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">
А код просто потребує використання IEnumerable та call ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
Рекомендується використовувати одну Модель або ViewModel (Модель, що містить інші моделі для створення складної моделі "Перегляд") на сторінку. Змішування та узгодження, як було запропоновано, можна вважати поганою практикою, але поки це працює і читається не БАД. Однак це демонструє потужність і гнучкість двигуна Razor.
Тож якщо вам потрібно вписати щось довільне або змінити інше значення від помічника Razor або просто не відчуваєте, як створювати власні помічники, для єдиної форми, яка використовує якусь незвичну комбінацію даних, ви можете швидко скористатися цими методами, щоб прийняти додаткові дані.