Laden...

ASP.NET MVC DopdownList / DropdownListFor

Erstellt von Silke_1 vor 10 Jahren Letzter Beitrag vor 10 Jahren 4.514 Views
S
Silke_1 Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren
ASP.NET MVC DopdownList / DropdownListFor

Hi, ich hab da mal ein Verständnis-Problem

Ich bin gerade dabei meine erste Anwendung mit MVC4 zu schreiben. Bin bis zu diesem Zeitpunkt auch ganz begeistert und gut zurecht gekommen.

Leider bekomme ich es nicht hin dass die Dropdownlist sich die selectierten Werte merkt.

View: oben die entsprechende dropdownlist, ein textfeld (suchen) + 2 radio button
--> nachdem ich die entsprechenden Werte ausgewählt habe sollte entsprechend die daten unter der form zu sehen sein.
(die view besteht also aus der form und einer tabelle)

Kurz zu meiner Vorgehensweise:
ich lese in meiner Datenklasse die entsprechenden werter in eine SelectListItem.
In der controller klasse übergeben ich die liste an ein viewbag weil ich ja nicht 2 modelle gleichzeitig übergeben kann (oder bin ich da falsch)

alles funktioniert wie gewünscht nur leider vergisst die dropdownliste immer die werte ...

Alle beispiele die ich bisher gefunden habe sind mit EF gemacht - kann ich aber leider nicht verwenden (alte oracle version) ...

hab auch schon viel im netz gesucht aber so richtig hab ich immer noch nicht verstanden wie es genau funktioniert

falls es jemand gibt der ebenfalls an dieser stelle scheitert oder gescheitert ist - vielleicht können wir uns ja zusammen das problem anschauen und gemeinsam lösen.

Silke

16.842 Beiträge seit 2008
vor 10 Jahren

ich lese in meiner Datenklasse die entsprechenden werter in eine SelectListItem.
In der controller klasse übergeben ich die liste an ein viewbag weil ich ja nicht 2 modelle gleichzeitig übergeben kann (oder bin ich da falsch)

Jain. Microsoft ist da mit ihren Beispielen einfach falsch.
Einen viel besseren Weg habe ich in ASP.NET MVC – Arbeiten mit View- und SubmitModels beschrieben.

So ist es kein Problem die Selektion im SubmitModel zu merken und das ViewModel angesichts der Selektion zu erstellen.

S
Silke_1 Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Vielen Dank, werde mich gleich mal schlau machen

16.842 Beiträge seit 2008
vor 10 Jahren

Du kannst zB in https://github.com/BenjaminAbt/ASPMVC5_Google2WayAuthentication/tree/master/ASPMVC5_Google2WayAuthentication schauen, wo ich meine ViewModels ableg und verwende etc...

129 Beiträge seit 2007
vor 10 Jahren

Ich finde wenn man sich einmal ein wenig mehr mit MVC auseinander gesetzt hat ist es nicht so schwer.
Grade auch dieses mit dem nur ein Model übergeben, das war am Anfang echt verwirrend aber es gibt da die möglichkeit ein ViewModel anzulegen und dort weitere Entities zu übergeben, sprich man kann es schon recht gut verschachteln so das man quasi auch auf die ViewBag verzichten könnte, jedoch muss man sagen das man ans ViewBag einfach alles übergeben kann.

Bin zur Zeit selbst für ein größeres Projekt welches ich nebenbei nun Programmieren will mir erstmal eine gescheite Benutzerverwaltung zu programmieren danach schau ich dann nach dem Rest 😁

16.842 Beiträge seit 2008
vor 10 Jahren

...möglichkeit ein ViewModel anzulegen und dort weitere Entities zu übergeben

..wobei Entitäten eigentlich nichts in der Oberfläche zusuchen haben...

jedoch muss man sagen das man ans ViewBag einfach alles übergeben kann.

..was ich eher als Nachteil empfinde, da der Entwickler hier seine Faulheit fördert anstatt eine sichere und korrekte View zu erstellen.

will mir erstmal eine gescheite Benutzerverwaltung zu programmieren danach schau ich dann nach dem Rest 😄

Tipp: vermeide alle Provider, die ASP von Haus aus bietet 😉

S
Silke_1 Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Hi,

ich hab mir das alles mal angesehen und versucht mich wirklich damit zu beschäftigen - aber es scheint dass ich da noch einen langen Weg vor mir habe.

Es wäre schön wenn mir jemand anhand eines Beispiels erklären könnte was da genau abläuft - ich komm einfach nicht dahinter.

Wie funktioniert das mit der Dropdown Liste und wie übergebe ich mehrere Models
(@using xxx.Models."Model" doch da wird das entsprechende Model nicht gefunden ...)

Silke

16.842 Beiträge seit 2008
vor 10 Jahren

Hab Dir Doch auf GitHub schon ein Beispiel bereit gestellt.
Wenn Du jetzt eine SelectList hast dann die einfach als weiteres Property hinzufügen.

public List<SelectList> Laender {get;set;}

und im SubmitModel nachher LandID, die sich aus der Value des SelectListItems ergibt.

S
Silke_1 Themenstarter:in
5 Beiträge seit 2013
vor 10 Jahren

Sorry, hab mir das Beispiel angeschaut - bin wohl doch zu blond
--> werde mir noch einmal ein Wochenende geben ....

E
96 Beiträge seit 2008
vor 10 Jahren

wollte mal fragen wie es aussieht hast du es geschafft

N
5 Beiträge seit 2014
vor 10 Jahren

Hallo,

seite ein paar Wochen klicke und lese ich mich durch diese tolle Seite, bisher habe ich das meiste was ich wissen wollte recht schnell durch die tollen Erklärungen und Beispiele nachvollziehen und somit auch weiterverwenden können.

Dafür mal Danke an alle die ihre Zeit und ihr Wissen mit den Usern dieser Seite teilen.

Es gibt allerdings ein einziges Puzzle was ich nicht nachvollziehen kann und das ist dieses (DropdownlistFor).

Ich habe ein ähnliches Problem wie Silke nur dass ich zwei Dropdownlisten brauche, die Beiträge von Abt und den Anderen habe ich mir anschaut und versucht nachzuvollziehen, doch in diesem Fall sitze ich wie viele andere auch auf dem Schlauch.

Das Model nutze ich zur Darstellung der eigentlichen Daten, aber wie kann ich dann die Models für die Dropdownlistfor übegeben, und wie bleibt dann das jeweils ausgewählte Item der Dopdownlist erhalten?

Da die Dropdownlist in MVC ja durch das ganze Internet und auch hier ein echtes Problem darstellt wäre es super wenn es ein simples Beispiel oder noch besser eine Erklärung was sich dahinter verbirgt geben würde die alle Fragen beantwortet.

Vielleicht wäre das ja was für den Bereich Baistechnologien ...

Entschuldigung wenn ich hiermit gegen die Forums-Regeln verstosse

Nane

16.842 Beiträge seit 2008
vor 10 Jahren
public class MyRegisterViewModel : BaseViewModel
{

   public List< SelectListItem > Laender { get ; set ; }
   public List< SelectListItem > Anreden { get ; set ; }

   public MyRegisterSubmitModel  SubmitModel { get ; set ; }

}

<select id="SelectedAnrede" name="SelectedAnrede">
@foreach(var item in Model.Anreden)
{
     <option value="@(item.Value)" @(item.Selected ? "selected=\"selected\"" : "">@(item.Text)</option>
}
</select>

<select id="SelectedLand" name="SelectedLand">
@foreach(var item in Model.Laender)
{
     <option value="@(item.Value)" @(item.Selected ? "selected=\"selected\"" : "">@(item.Text)</option>
}
</select>



public class MyRegisterSubmitModel : BaseSubmitModel
{
    public String SelectedAnrede { get; set; }
    public Int32 SelectedLand { get; set; }


}

public ActionResult Register()
{
 var vm = GetMyRegisterViewModel ( null );
 return View(vm);
}

[HttpPost]
public ActionResult Register(MyRegisterSubmitModel  sm)
{
 var vm = GetMyRegisterViewModel ( sm);
 return View(vm);
}


private MyRegisterViewModel GetMyRegisterViewModel (MyRegisterSubmitModel sm)
{
 var vm = MyRegisterViewModel( );
 vm.SubmitModel = sm ?? new MyRegisterSubmitModel( );
 // oder GetViewModel< MyRegisterViewModel >( ) wenn man meinen Blog gelesen hat
 
 vm.Laender = new List< SelectListItem >( );
 foreach ( var land in GetLaenderWoherAuchImmer( ) )
 {
    var item = new SelectListItem( );
	{
	    item.Selected = vm.SubmitModel.SelectedLand.Equals( land.ID );
		item.Text = land.Name;
		item.Value = land.ID.ToString( );
	}
	 vm.Laender.Add( item )
 }
 
 vm.Anreden = new List< SelectListItem >( );
 foreach ( var anrede in GetAnredenWoherAuchImmer( ) )
 {
    var item = new SelectListItem( );
	{
	    item.Selected = vm.SubmitModel.SelectedAnrede.Equals( anrede.Bezeichnung );
		item.Text = anrede.Bezeichnung;
		item.Value = anrede.Bezeichnung;
	}
	 vm.Anreden.Add( item )
 }
 return vm;
}


(War jetzt blind hier im Foren-Editor runter getippt, evtl. fehlt also ein ; oder ist die Formattierung unpassend.)

Steht genauso in meinem anderen Beitrag und funktioniert einwandfrei.
Von HTML-Helpern (wie DropDownListFor) wie gesagt: meine Meinung: Finger weg.

N
5 Beiträge seit 2014
vor 10 Jahren

Hi Abt,

ich hab dein Beispiel runtergeladen leider habe ich es nicht zum laufen gebracht.
Liegt vielleicht an VS2010.

Aber ich habe es mir angeschaut und auch das eine oder andere abgeschaut - nochmals Danke für deine Mühe.

Ich werd mir jetzt deinen neuen Beitrag gleich anschauen.