Familie Formă Preia valorile elementelor de formular trimise în corpul unei solicitări HTTP folosind un formular care utilizează metoda POST.
Sintaxă
Formular.Solicitare(element) [(index) |.Numara]
Opțiuni
element
Numele elementului de formular din care familia preia valori.
index
Un parametru opțional care permite accesul la una dintre mai multe valori ale parametrilor. Poate fi orice număr întreg între -1 și Formular.Solicitare(parametru).Numara.
Note
Familie Formă indexate după numele parametrilor din corpul cererii. Sens Formular.Solicitare(element) este o matrice cu toate valorile element, care apar în corpul cererii. Puteți determina numărul de valori ale parametrilor prin apelare Formular.Solicitare(element).Numara. Dacă parametrul nu are mai multe valori asociate, contorul este 1. Dacă parametrul nu este găsit, contorul este 0.
Pentru a face referire la o singură valoare a unui element de formular care are mai multe valori, trebuie să specificați o valoare pentru index. Parametru index poate fi orice număr între 1 și 1 Formular.Solicitare(element).Numara. Dacă unul dintre mai mulți parametri de formular este referit fără o valoare index, datele sunt returnate ca șir separate prin virgulă.
Când Solicitare.Formular utilizat cu parametri, serverul web analizează corpul cererii HTTP și returnează datele specificate. Dacă aplicația dvs. necesită date neanalizate dintr-un formular, îl puteți accesa sunând Solicitare.Formular fara parametri.
Notă. Când lucrați cu ASP și trimiteți cantități mari de date care depășesc 100 KB, metoda Solicitare.Formular nu poate fi folosit. Dacă aplicația dvs. trebuie să trimită date dincolo de această limită, puteți crea un bean care utilizează Solicitare.BinaryRead.
Este posibil să iterați peste toate valorile datelor dintr-o cerere de formular. De exemplu, dacă utilizatorul completează un formular furnizând două valori, Chocolate și Butterscotch, pentru elementul FavoriteFlavor, puteți extrage acele valori folosind scriptul de mai jos.
Pentru i = 1 To Request.Form("FavoriteFlavor").Count
Response.Write Request.Form("FavoriteFlavor")(i) & "
"
Scriptul de mai sus va afișa următoarele informații.
Puteți utiliza această tehnică pentru a afișa numele parametrului, așa cum se arată în scriptul de mai jos.
Pentru i = 1 la Request.Form("FavoriteFlavor").count %>
Request.Form(FavoriteFlavor) =<%= Request.Form("FavoriteFlavor")(i)_
%>
Acest script va afișa următoarele în browser:
Request.Form(FavoriteFlavor) = Ciocolată
Request.Form(FavoriteFlavor) = Butterscotch
Exemplu
Luați în considerare următoarea formă:
Figura arată cum ar arăta această pagină simplă într-o fereastră de browser web:
Când utilizatorul face clic pe butonul Trimite, browserul preia valorile curente ale fiecărui control și formează un șir lung din acestea. Acest șir este apoi trimis către pagina specificată în handle
Ultima actualizare: 31.10.2015
Deși putem scrie noi înșine orice ajutor necesar, cadrul MVC oferă deja un set mare de ajutoare html încorporate care ne permit să generăm acest sau acel marcaj, în principal pentru lucrul cu formulare. Prin urmare, în majoritatea cazurilor, nu va trebui să vă creați propriile ajutoare și îi puteți folosi pe cei încorporați.
Ajutor Html.BeginForm
Putem folosi elemente html standard pentru a crea formulare, de exemplu:
Acesta este un formular html simplu care trimite toate datele introduse atunci când se face clic pe butonul. Solicitare POST la /Acasă/Cumpără. Ajutorul încorporat BeginForm/EndForm vă permite să creați același formular:
Introdu numele tau |
|
Introdu adresa: |
|
Metoda BeginForm ia ca parametri numele metodei de acțiune și numele controlerului, precum și tipul cererii. Acest ajutor creează ca o etichetă de pornire
. Prin urmare, atunci când redăm vizualizarea în fluxul de ieșire, vom obține același cod html ca și cu eticheta de formular. Prin urmare, ambele metode sunt identice.Există un punct aici. Dacă avem două versiuni ale aceleiași metode definite în controler - pentru metodele POST și GET, de exemplu:
Public ActionResult Cumpărare() ( return View(); ) public string Cumpărare(Purchase purchase) ( .............. return „Vă mulțumim că ați cumpărat cartea”;; )
Adică, de fapt, apelarea paginii cu formularul și trimiterea formularului se realizează prin aceeași acțiune Cumpărare. În acest caz, este posibil să nu specificați parametrii în ajutorul Html.BeginForm:
@using(Html.BeginForm()) ( ............. )
Introducerea informațiilor
Exemplul anterior a folosit elemente html standard împreună cu ajutorul Html.BeginForm. Cu toate acestea, setul de ajutor html conține, de asemenea, ajutorul pentru introducerea utilizatorului. MVC definește o gamă largă de ajutoare de intrare pentru aproape fiecare element html. Ce să alegeți - ajutor sau elemente de intrare html standard, decide însuși dezvoltatorul.
Indiferent de tip, toți ajutoarele html de bază folosesc cel puțin doi parametri: primul parametru este utilizat pentru a seta valorile pentru atributele id și name, iar al doilea parametru este utilizat pentru a seta valoarea atributului value
Html.TextBox
Ajutorul Html.TextBox generează o etichetă de intrare cu o valoare a atributului de tip text . Ajutorul TextBox este folosit pentru a primi intrarea utilizatorului. Deci, să rescriem formularul anterior cu câmpurile de intrare înlocuite cu ajutorul Html.TextBox:
@using(Html.BeginForm(„Cumpără”, „Acasă”, FormMethod.Post)) (
Introdu numele tau:
@Html.TextBox(„Persoană”, „Introduceți numele”)Introdu adresa:
@Html.TextBox(„Adresă”, „Introduceți o adresă”) }Vom obține același rezultat:
Html.TextArea
Ajutorul TextArea este folosit pentru a crea un element
va exista următorul marcaj html:
Vă rugăm să rețineți că ajutorul decodifică valoarea plasată în acesta, inclusiv etichetele html (toți ajutoarele decodifică valorile modelului și valorile atributelor). Alte versiuni ale asistentului TextArea vă permit să specificați numărul de rânduri și coloane care determină dimensiunea câmpului de text.
@Html.TextArea(„text”, „bună ziua
lume", 5, 50, nul)
Acest ajutor va genera următorul marcaj:
Html.Hidden
În exemplul de formular, am folosit un câmp ascuns de intrare type="hidden" , în locul căruia am fi putut folosi doar ajutorul Html.Hidden. Deci, următorul ajutor sună:
@Html.Hidden(„CarteId”, „2”)
generați markup:
Și când trecem o variabilă din ViewBag, trebuie să o aruncăm la tipul șirului: @Html.Hidden ("BookId", @ViewBag.BookId ca șir)
Html.Parola
Html.Password creează un câmp pentru introducerea unei parole. Este similar cu ajutorul TextBox, dar afișează masca de parolă în loc de caracterele introduse. Următorul cod:
@Html.Password(„Parola utilizator”, „val”)
generează markup:
Html.RadioButton
Ajutorul Html.RadioButton este folosit pentru a crea butoane radio. Acesta generează un element de intrare cu valoarea type="radio" . Pentru a crea un grup de butoane radio, trebuie să atribuiți același nume tuturor (proprietatea nume):
@Html.RadioButton(„culoare”, „roșu”) roșu
@Html.RadioButton(„culoare”, „albastru”) albastru
@Html.RadioButton(„culoare”, „verde”, adevărat) verde
Acest cod creează următorul marcaj:
roșu
albastru
verde
Html.CheckBox
Html.CheckBox poate fi folosit pentru a crea două elemente simultan. Luați, de exemplu, următorul cod:
@Html.CheckBox(„Activați”, fals)
Această expresie va genera următorul cod HTML:
Adică, pe lângă caseta de selectare în sine, este generat și un câmp ascuns. De ce este nevoie? Ideea este că browserul trimite valoarea casetei de selectare numai atunci când caseta de selectare este selectată sau bifată. Și câmpul ascuns asigură că elementul Enable este setat la o valoare chiar dacă utilizatorul nu a bifat caseta.
Html.Label
Ajutorul Html.Label creează un element , iar parametrul transmis helperului definește valoarea atributului for și în același timp textul de pe element. Versiunea supraîncărcată a ajutorului vă permite să definiți valoarea atributului for și textul de pe etichetă independent unul de celălalt. De exemplu, declarația de ajutor Html.Label(„Nume”) produce următorul marcaj:
Elementul de etichetă reprezintă o etichetă simplă pentru atașarea informațiilor la elementele de intrare, cum ar fi câmpurile de text. Atributul for al elementului label trebuie să conțină ID-ul elementului de intrare asociat. Când utilizatorul face clic pe o etichetă, browserul transferă automat focalizarea pe elementul de intrare asociat cu acea etichetă.
Html.DropDownList
Ajutorul Html.DropDownList creează o listă derulantă, adică un element . Pentru a genera o astfel de listă, aveți nevoie de o colecție de obiecte SelectListItem care reprezintă elementele listei. Obiectul SelectListItem are proprietăți Text (textul de afișat), Value (valoarea în sine, care poate să nu fie aceeași cu textul) și Selected . Puteți crea o colecție de obiecte SelectListItem sau puteți utiliza ajutorul SelectList. Acest ajutor analizează obiectele IEnumerable și le convertește într-o secvență de obiecte SelectListItem. De exemplu, @Html.DropDownList("countires", new SelectList(new string ("Rusia","SUA", "Canada","Franța")),"Countries") generează următorul marcaj:
Acum s-a terminat exemplu complex. Să enumerăm o colecție de elemente de carte. În controler, vom trece această listă prin ViewBag:
BookContext db = new BookContext(); public ActionResult Index() ( Cărți SelectList = new SelectList(db.Books, „Author”, „Nume”); ViewBag.Books = cărți; return View(); )
Aici creăm un obiect SelectList trecând în constructorul său setul de valori pentru listă (db.Books), numele proprietății model Book de folosit ca valoare (Author) și numele proprietății model Book de utilizat pentru a fi afișat în listă. În acest caz, nu este necesar să setați două proprietăți diferite, a fost posibil să setați una atât pentru valoare, cât și pentru afișare.
Apoi, în vizualizare putem folosi această SelectList astfel:
@Html.DropDownList(„Autor”, ViewBag.Books ca SelectList)
Și când vizualizarea este redată, toate elementele SelectList vor fi adăugate la lista drop-down
Html.ListBox
Ajutorul Html.ListBox, precum DropDownList , creează un element , dar permite selecția multiplă de elemente (adică atributul multiplu este setat la multiple). Pentru a crea o listă care acceptă selecția multiplă, în loc de SelectList, puteți utiliza clasa MultiSelectList:
@Html.ListBox("countires", new MultiSelectList(șir nou ("Rusia","SUA", "China","India")))
Acest cod generează următorul marcaj:
Odată cu transferul de valori individuale pe server, totul este clar, dar cum să transferați mai multe valori? Să presupunem că avem următoarea formă:
@using (Html.BeginForm()) ( @Html.ListBox(„țări”, nou MultiSelectList(șir nou („Rusia”, „SUA”, „China”, „India”)))
}Apoi metoda controlerului ar putea primi aceste valori astfel:
Index de șir public (șir țări) ( șir rezultat = ""; foreach (șir c în țări) ( rezultat += c; rezultat += ";"; ) return "Ați ales: " + rezultat; )
Formular cu mai multe butoane
De obicei, există un singur buton de trimitere pe un formular. Cu toate acestea, în anumite situații poate fi necesar să folosiți mai mult de un buton. De exemplu, există un câmp pentru introducerea unei valori și două butoane indică dacă această valoare trebuie ștearsă sau, dimpotrivă, adăugată:
@using (Html.BeginForm ("MyAction", "Home", FormMethod.Post)) (
}
Cea mai simplă soluție este să setați atributul nume la aceeași valoare pentru fiecare buton, dar setați atributul valoare la o valoare diferită. Și metoda care ia forma ar putea arăta astfel:
Public ActionResult MyAction(produs șir, acțiune șir) ( if(action=="add") ( ) else if(action=="delete") ( ) // restul codului metodei )
Și cu ajutorul unei construcții condiționate, în funcție de valoarea parametrului de acțiune, care stochează valoarea atributului de valoare al butonului apăsat, se realizează anumite acțiuni.