Dünaamilistes rippmenüüs valitakse mvc c näited. Pöördumatus on pöördumatu. Vaateandmete visualiseerimine

Loon oma kontrolleris järgmise SelectListi.

Var u = uus Uuskasutaja(); u.UserTypeOptions = new SelectList(new List ( new SelectListItem ( Selected = true, Text = string.Empty, Value = "-1"), new SelectListItem ( Selected = false, Text = "Homeowner", Value = ((int)) UserType.Homeowner).ToString()), uus SelectListItem ( Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()), )); tagasi u;

Ja näitan seda oma vaates järgmiselt:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions)

Näib, et annan sellele kehtiva SelectListItem komplekti, mis peaks olema üsna lihtne rippmenüü, kuid selle asemel, et saada kehtivat ilusate väärtuste ja tekstiga loendit, saan järgmise:

System.Web.Mvc.SelectListItem System.Web.Mvc.SelectListItem System.Web.Mvc.SelectListItem

Mida see annab? Niipalju kui ma aru saan, peaks see toimima.

3 vastust

Te ei saanud valida, millisel väljal tekst ja väärtus on valikuloendis. Sellepärast on sellel iga loendi objekti jaoks .ToString(). Võiks arvata, et kuna see on SelectListItem loend, peaks see olema piisavalt tark, et seda tuvastada... aga see pole nii.

( uus SelectListItem ( Valitud = tõene, Tekst = string.Tühi, väärtus = "-1"), uus SelectListItem ( Valitud = vale, Tekst = "koduomanik", väärtus = ((int)UserType.Homeowner).ToString()) , uus SelectListItem ( Selected = false, Text = "Contractor", Value = ((int)UserType.Contractor).ToString()), "Value" , ​​​​"Tekst", 1);

Muide, võite kasutada mis tahes tüüpi massiivide loendit... ja seejärel lihtsalt määrata atribuutide nimed, mis toimivad teksti ja väärtusena.

Ma arvan, et parem on seda teha nii:

U.UserTypeOptions = new SelectList(new List ( new SelectListItem ( Tekst = "Koduomanik", Väärtus = ((int)UserType.Homeowner).ToString()), new SelectListItem ( Text = "Contractor", Value = ((int)) UserType.Contractor).ToString()), ), "Väärtus" , ​​"Tekst");

Eemaldasin elemendi -1 ja iga elemendi väärtuseks määratakse tõene/väär.

Siis teie arvates:

@Html.DropDownListFor(m => m.UserType, Model.UserTypeOptions, "Select one")

Nii et kui määrate üksuse Select One, kuid te ei määra ühte SelectListis valitud üksust, on UserType tühi (Kasutajatüüp peaks olema int?).

Kui teil on vaja määrata üks SelectListi valitud üksustest, saate kasutada:

U.UserTypeOptions = new SelectList(suvandid, "Väärtus" , "Tekst", kasutajaIdToBeSelected);

Lihtsalt proovige seda habemenuga

@( var selectList = new SelectList(new List ( new SelectListItem (Tekst = "Google", Value = "Google)"}, new SelectListItem {Text = "Other", Value = "muud"}, }, "Value", "Text"); } @Html.DropDownListFor(m => m.YourFieldName, selectList, "Default label", new { @class = "css-class" }) !}

@Html.DropDownList("ddlDropDownList", selectList, "Default label", new ( @class = "css-class" ))

Kuidas kasutada Asp.Neti loendit

Kollektsiooni klassid on klasside komplekt, mis on loodud spetsiaalselt objektide rühmitamiseks ja nendega seotud ülesannete täitmiseks. Kogumisklasside põhifunktsioonid on elementide lisamine kogusse, elementide eemaldamine kogust, elementide arvu hankimine kogusse jne. Loendiklass on kollektsiooni liige ja määratletud nimeruumis System.Collections.Generic.

Klass C# List esindab tugevalt tüpiseeritud objektide loendit, millele pääseb juurde indeksi abil. Loendi elementidele pääseb juurde täisarvuindeksi abil. Selle kogu indeksid on nullpõhised.

Parameeter T on loendis olevate elementide tüüp.

Kas lisada loendikogusse üksusi?

Lisage loendi kogusse täisarvu väärtused

C# loend< int >intList = uus loend< int >(); intList.Add(20); intList.Add(30); intList.Add(50); intList.Add(70); VB.Net Dim intList As New List(Of Integer)() intList.Add(20) intList.Add(30) intList.Add(50) intList.Add(70)

Lisage loendisse stringi väärtused

C# months.Add("jaanuar"); kuud.Add("Veebruar"); kuud.Add("märts"); kuud.Add("aprill"); kuud.Add("mai"); kuud.Add("Juuni"); VB.Neto kuud.Lisa("jaanuar") kuud.Lisa("jaanuar") kuud.Lisa("märts") kuud.Lisa("aprill") kuud.Lisa("mai") ​​kuud.Lisa("juuni") )

Loendi elementide arvu hankimine?

Saate kasutada atribuuti "count", et teada saada loendi kogus olevate üksuste arvu

Kas tuua üksused loendist alla?

Saate hankida üksusi loendikogust, kasutades silmuseid.

foreach silmus

C# foreach (stringi kuu kuudes) ( MessageBox.Show(month); ) VB.Net Iga kuu jaoks Stringina kuudes MessageBox.Show(month) Järgmine

silmuse jaoks

C# jaoks (int i = 0; i< months.Count; i++) { MessageBox.Show(months[i]); } VB.Net For i As Integer = 0 To months.Count - 1 MessageBox.Show(months(i)) Next

Kas lisada üksus loendisse?

Saate üksuse loendisse lisada, määrates selle indeksi väärtuse, näiteks (indeks,üksus) .

Ülaltoodud koodis on kuu "märts" lisatud indeksi positsioonile 2.

Kas eemaldada üksus loendikogust?

Eemalda() saab kasutada üksuse eemaldamiseks loendikogust.

kuud.Remove("märts");

Kontrollige, kas üksus sisaldab loendikogus ?

Saate kasutada meetodeid List.Contains(), et kontrollida, kas loendis üksus on olemas

C# if (months.Contains("märts")) ( MessageBox.Show("Kuu märts on loendis olemas"); ) VB.Net If months.Contains("March") Then MessageBox.Show("Kuu märts on loendis olemas") Lõpp Kui

Kas kopeerida massiiv loendikogusse?

C# string strArr = uus string;< string >strArr = "pühapäev";< string >strArr = "esmaspäev";

strArr = "Teisipäev";

//siia massiivi kopeerimiseks loendi loendisse

arrlist = uus nimekiri

(strArr); VB.Net Dim strArr As String() = Uus string(2) () strArr(0) = "pühapäev" strArr(1) = "esmaspäev" strArr(2) = "teisipäev" "siia massiivi kopeerimiseks loendisse Dim arrlist Uue loendina (stringist) (strArr)

Lõpuks selge meetod eemaldage loendikogust kõik üksused.

Järgmine programm näitab mõningaid loendikogude toiminguid.

Kommentaarid: 0

Mõnikord põhjustab ripploenditega töötamine mõningaid raskusi. Vaatame näidet, kus peame looma muusikapala muutmise lehe. Iga kompositsioon sisaldub albumis, sellel on nimi ja number. Seda saab kujutada järgmises koodis:

@Html.DropDownList("AlbumId", Mudel.Albumid) ... @Html.TextBox("Pealkiri", Mudel.Pealkiri) ... @Html.TextBox("Rajanumber", Mudel.Rajanumber)

Abistamismeetod Html.DropDownList töötab SelectListItem objektidega. Esitlusmudelit saab esitada järgmiselt:

Avalik klass EditSongViewModel ( avalik string Title ( get; set; ) public int TrackNumber ( get; set; ) public IEnumerable Albums ( get; set; ) )

Seda meetodit saab kasutada järgmiselt:

Model.Albums = _repository.FindAllAlbums().ToSelectItems(selectedId);

See kood töötab, kuna Html.DropDownList võtab sisendparameetrina IEnumerable.

Saate kasutada SelectList klassi, kuid peate seda hoolikalt kasutama. Näiteks kui te ei määra valikuloendis SelectList parameetreid DataTextField ja DataValueField, ei tööta rippmenüü õigesti.

// vale kasutusmudel.Albumid = new SelectList(_repository.FindAllAlbums().ToSelectListItems(1));

Rippmenüüs kuvatakse iga üksuse tekstinime asemel "System.Web.Mvc.SelectListItem".

Klass SelectList on loodud üksuste teisendamiseks sama eesmärgiga nagu meie ülaltoodud laiendusmeetod (üksuste teisendamiseks SelectListItem kogumiks), kuid see kasutab hilist sidumist. Järgmine kood töötab, kuna oleme loendiüksuste jaoks määranud kirjelduse ja väärtuse väljad.

// õige kasutusmudel.Albumid = new SelectList(_repository.FindAllAlbums(), "ID", "Name");

Valitud väärtuse hankimine

Kui lehevormi andmete vastuvõtmiseks kasutatakse sama vaatemudelit, siis võib eeldada, et standardne ASP.NET MVC väärtuse siduja lähtestab albumikogu uuesti ja näitab valitud. Kuid kahjuks pole see nii – albumikogu jääb tühjaks.

Leht saadab serverisse ainult valitud albumi identifikaatori. Kui teil on vaja mudelis see väärtus hankida, peate lisama atribuudi AlbumID.

Avalik klass EditSongViewModel ( public int AlbumId ( get; set; ) public string Title ( get; set; ) public int TrackNumber ( get; set; ) public IEnumerable Albums ( get; set; ) ) Ja lisaks saab vaates olev kood muuta järgmiselt: @Html.DropDownListFor(x => x.AlbumId, Model.Albums) ... @Html.TextBoxFor(x => x.Title) ... @Html.TextBoxFor(x => x.TrackNumber )

Niisiis, võtame kokku ülaltoodu põhipunktid:

  • Ärge kasutage valikut SelectList ilma DataTextField ja DataValueField atribuute määramata.
  • Kui vastate, ärge oodake, et ripploendi kogu on täidetud.
  • Laiendusmeetodid aitavad teil luua SelectListItem objektide jadasid tugevasti trükitud koodis.
  • Html.DropDownList ei nõua ilmtingimata SelectList-i – seda teeb kõik SelectListItem objektide kogu.

Dünaamilised ripploendid (DropDownList) võimaldavad kasutajal valida üksuse esimesest ripploendist, mis täidab teise ripploendi esimese valiku põhjal. Selles artiklis kavatseme näidata, kuidas rakendada dünaamilisi ripploendeid, kasutades ASP.NET MVC 3 raamistikku.

Vaatemudeli loomine:

Esimene samm on luua ViewModel, mis esindab vaate elemente. Meie esitlusmudel keerleb kategooriate ja toodete vaheliste suhete ümber. Kasutaja valib ripploendist kategooria, mis lisab kõik vastavad tooted teise rippmenüüsse. Allolevas rakenduses kuvatakse artikliEditViewModel.

Süsteemi kasutamine; kasutades System.Collections.Generic; kasutades System.ComponentModel.DataAnnotations; kasutades System.Linq; kasutades System.Web; kasutades System.Web.Mvc; namespace MvcApplication1.ViewModels ( avalik klass ArtikkelEditViewModel ( private List _categories = new List(); private List _products = new List(); public string SelectedCategory ( get; set; ) public string SelectedProduct ( get; set; ) public List Products ( get ( tagasta _tooted; ) ) public List Categories ( hanki ( _categories.Add(new SelectListItem())( Text = "Ruby", Value = "1")); _categories.Add(new SelectListItem())( Text = "JavaScript ", Value="2")); tagasta _kategooriad; ) ) ) )

Täitke kategooriate rippmenüü:

HomeControlleri indeksi toiming tagastab vaate jaoks uue artikliEditViewModel. Vaade kasutab ripploendi täitmiseks artikliEditViewModel atribuuti Kategooriad. Indeksi toiming on toodud allpool:

Public ActionResult Index() (tagasi vaadet(uus artiklitEditViewModel()); )

Rippmenüü on täidetud alloleva koodiga:

Valige kategooria: @Html.DropDownListFor(x => x.SelectedCategory, new SelectList(Model.Categories,"Väärtus","Tekst"),"Palun valige kategooria") @Html.ValidationMessageFor(x => x.SelectedCategory )

Rippmenüü on seotud vaatemudeli atribuudiga SelectedCategory. SelectedCategory atribuuti kaunistab ka (nõutav) atribuut, mis tagab, et SelectedCategory ei jää tühjaks ega vaikeväärtusega. Allolev ekraanipilt näitab kontrolli tulemust, mis käivitub, kui kategooria rippmenüü jääb vormi täitmisel vaikeväärtusele.

Kontrollimine nurjub, kuna vaikevalikul "Vali kategooria" pole sellega seotud väärtust. ASP.NET MVC proovib siduda tühja stringi atribuudiga SelectedCategory, kuid ei saa seda teha, kuna SelectedCategory on atribuudiga märgitud.

Toodete loendi toomine ja sõltuva ripploendi täitmine:

Meie järgmine ülesanne on hankida valitud kategooria ja seejärel saada kategooria ID abil seotud toodete loend. Seda tehakse Ajaxi kõne kaudu, kasutades meie lemmik JQuery raamatukogu. Allolev teostus näitab üksikasju.

$(document).ready(function () ( $("#SelectedCategory").change(function () ( $.get("/Home/GetProductsForCategory/" + $(this).val(), funktsioon (vastus) ( var products = $.evalJSON(response); var ddlSelectedProduct = $("#SelectedProduct"); // tühjendage kõik eelnevad suvandid $("#SelectedProduct > option").remove(); // sisestage (i) tooted = 0;< products.length; i++) { ddlSelectedProduct.append($("").val(products[i].Value).text(products[i].Text)); } }); }); });

Ülaltoodud kood kutsub esile toimingu GetProductsForCategory, mille sisendparameetriks on categoryId. GetProductsForCategory tagastab JSON-vastuse, mis esindab toodete loendit. Enne ripploendi toodetega täitmist tühjendame ripploendi, eemaldades kõik olemasolevad üksused. Toiming GetProductsForCategory toimib järgmiselt:

Avalik string GetProductsForCategory(stringi id) ( // hankige tooted hoidlast var products = new List(); if (id == "1") ( products.Add(new SelectListItem()) (Tekst = "Sissejuhatus Rubysse" , Value = "1")); products.Add(new SelectListItem() (Tekst = "Ruby Unit Testing", Value = "2") ) else if(id == "2") ( products.Add( new SelectListItem) () ( Tekst = "JavaScripti testimine",Väärtus = "1")); (tooted);

Ülaltoodud toiming tagastab lihtsalt kõvasti kodeeritud väärtused, kuid reaalses rakenduses tooksite tooted salvestussüsteemist.

Allolev ekraanipilt näitab lõpptulemust:

Järeldus:

Selles artiklis õppisime, kuidas luua ASP.NET MVC-s dünaamilist rippmenüüd. Tulevikus näitame, kuidas seda lähenemisviisi lihtsustada, luues dünaamiliste rippmenüü loendite jaoks HtmlHelperi.

Iga elutunni ohu teadvustamine

annab tundlikkuse ja teadmise pöördumatusest.

Aforismid elust

Pöördumatus kui isiksuse omadus on võime tegutseda, teha otsuseid nii otsustavalt ja lõpuks, et kõigile saab selgeks, et midagi ei muudeta, see on viimane, viimane sõna või tegu.

Ainult naine saab öelda oma lõpliku ja tagasivõtmatu "Võib-olla".

Venemaal keelati ropp keelekasutus pöördumatult ära, mu mees lõpetas lõpuks emaga rääkimise.

Olin elus pöördumatult ja täielikult pettunud. Sa ei saa midagi usaldada. Avasin ukse, millel oli kiri “Naised” ja seal oli tualett!

Pöördumatus on see, kui kõik sillad on otsustavalt põletatud. "Põletage sillad" - see väljend tuli meile Julius Caesarilt, kes ütles: "Kõik sillad on põletatud, Rubicon tuleb ületada." Sõjaliste operatsioonide käigus põletati sildu kahel juhul: - nii, et ei tekkinud kiusatust taganeda; - et saaksite vaenlase tagaajamisest kõrvale hiilida ja ta selle silla ees kinni pidada. Hiljem muutus see väljend rahumeelseks kõneks. Kuid tähendus jäi samaks - sooritada tegu, mis ei lase sul minevikku naasta, see tähendab teha midagi pöördumatut. See on tegu, mille tagasipöördumispunkt on läbitud. Kui Julius Caesar Galliast ületas La Manche'i väina ja maabus koos leegionidega riigis, mida praegu nimetatakse Inglismaaks, käskis ta oma sõduritel Doveri kriidikaljudel peatuda; kahesaja jala kõrguselt mere kohalt alla vaadates nägid nad punaseid leeke, mis neelasid kõik laevad, millega nad saabusid. Nad olid vaenlase riigis, viimane side kontinendiga oli kadunud, viimane taganemisvahend oli põletatud ja neil jäi teha vaid üks: edasi liikuda ja võita. Ja nad võitsid.

Tšehhovi Nina filmis "Kajakas" ütleb: "Olen pöördumatult otsustanud, täring on visatud, ma lähen lavale." Ühesõnaga, pöördumatus eeldab, et öeldud sõna on viimane, lõplik ja otsustav.

Naine internetis teeb pöördumatuse kontekstis õige ja targa järelduse: "Olen lihtsalt lõplikult ja pöördumatult veendunud, et armastusel ei ole kindlat saabumisaega. Pole vaja seista perroonil, püüdes igasse saabuvasse rongi mahtuda. Järgige oma südame ajakava...” Parem on otsustavalt ja pöördumatult keelduda, kui kiirustada ja olla keeldumise pärast piinlik. Tänapäeval on tüdrukud mõnikord nii häbelikud, et neil on häbi meestest pöördumatult keelduda.

Pöördumatus headuses on sihikindluse ja paindumatuse tütar. Tehtud otsuse tühistamatuse tipp on minu arvates Valgevene operatsioon Suure Isamaasõja ajal. “Minu bagration” nii kutsus Stalin Rokossovskit. Rokossovski tegi ettepaneku viia läbi viies "stalinlik löök" kahest sillapeast, kuid peakorteris nõudsid nad ühte, sealhulgas Stalinit, Žukovit ja teisi.

Staliniga vaidlemine on ohtlik ettevõtmine, kuid kui tehakse tühistamatu otsus, vajuvad hirmud ja hirmud tagaplaanile. Rokossovski teatas: "Teen ettepaneku murda läbi vaenlase kaitse kahe löögirühmaga, mis tegutsevad lähenevas suunas: kirdest - Bobruiskisse, Osipovitšisse ja lõunast - Osipovitšisse."

See otsus ajendas Stalinit küsima: "Miks te rindejõude laiali ajate?" Kas poleks parem ühendada nad üheks võimsaks rusikaks ja rammida selle rusikaga vaenlase kaitset? Kaitsest tuleb ühest kohast läbi murda. – Kui murrame kaitsest läbi kahel alal, seltsimees Stalin, saavutame märkimisväärseid eeliseid. - Milliseid? - Esiteks, kahes sektoris lüües paneme koheselt tegutsema suured jõud ja seejärel võtame vaenlaselt võimaluse manööverdada reserve, mida tal niigi vähe on. Ja lõpuks, kui meil õnnestub kasvõi üks ala, paneb see vaenlase raskesse olukorda. Edu tagatakse rindel olevatele vägedele. "Mulle tundub," rõhutas Stalin, "et löök tuleks anda üks kord ja Dnepri sillapeast 3. armee sektoris." Niisiis, mine ja mõtle kaks tundi ja siis teata oma mõtetest peakorterile.

Rokossovski viidi kabineti kõrval asuvasse väikesesse tuppa. Konstantin Konstantinovitšile tundusid need kaks tundi igavikuna. Ta kontrollis ikka ja jälle kõiki rinde staabi poolt koostatud arvutusi. Polnud kahtlust – kaks lööki oli vaja lüüa. Stalini kabinetti sisenedes jäi Konstantin Konstantinovitš nagu alati rahulikuks.

– Kas olete lahenduse läbi mõelnud, seltsimees Rokossovski? - See on õige, seltsimees Stalin. - Kas anname ühe või kaks lööki? – Joseph Vissarionovitš kissitas silmi. Kontoris oli vaikne.

"Ma usun, seltsimees Stalin, et soovitavam on anda kaks lööki." – Nii et sa pole meelt muutnud? – Jah, ma nõuan oma otsuse elluviimist. – Miks te ei ole rahul rünnakuga Dnepri taga asuvast sillapeast? Sa raiskad oma jõudu! – Toimub jõudude hajutamine, seltsimees Stalin, ma olen sellega nõus. Kuid seda tuleb teha, võttes arvesse Valgevene maastikku, soosid ja metsi, aga ka vaenlase vägede asukohta. Mis puutub Dnepri taha jäävasse 3. armee sillapeasse, siis selle suuna tegevusvõime on väike, sealne maastik on ülikeeruline ja põhja poolt tiirleb tugev vaenlase rühmitus, millest ei saa mööda vaadata. "Mine, mõtle uuesti," käskis Stalin. - Mulle tundub, et sa oled asjata kangekaelne.

Taas on Rokossovski üksi, jälle mõtleb ta üksteise järel läbi kõik poolt- ja vastuargumendid ning muutub oma arvamuses taas tugevamaks: tema otsus on õige ja PÕHENDAMATU. Kui ta büroosse tagasi kutsuti, püüdis ta oma kahe löögi kohta võimalikult veenvalt esitada. Rokossovski lõpetas kõne ja tekkis paus. Stalin süütas laua ääres piibu vaikselt, tõusis siis püsti ja lähenes Konstantin Konstantinovitšile: "Rindeülema visadus tõestab, et pealetungi korraldus oli hoolikalt läbi mõeldud." Ja see on edu tagatis. Teie otsus on kinnitatud, seltsimees Rokossovski.