myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Web-Technologien » MVC 3 DropDownListFor
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

MVC 3 DropDownListFor

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Grumbler85 Grumbler85 ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.05.2008
Beiträge: 538
Entwicklungsumgebung: VS 2010
Herkunft: Rheingau Taunus


Grumbler85 ist offline Füge Grumbler85 Deiner Kontaktliste hinzu

MVC 3 DropDownListFor

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo allerseits,

ich habe eine MVC3 DropDown-Liste, die nicht das erwartete Element als "selected" markiert und ich würde mich über einen Ratschlag freuen:

Die Liste wird initialisiert mit:

C#-Code:
var displayNamesSelectList = new SelectList((IEnumerable<String>)ViewBag.AvailableDisplayNames, Model.DisplayName);

Prüfe ich während des Debuggens, ist der korrekte Eintrag als "selected" markiert und zwar NUR der korrekte Eintrag, also auch kein weiterer.

Nach dem Ausführen von

C#-Code:
@Html.DropDownListFor(model => model.DisplayName, displayNamesSelectList)

ist aber leider der erste Eintrag markiert. Kurz vor der Ausführung, ist die SelectList noch in Ordnung (geprüft mit dem Debugger).

Ein weiteres Feld mit dem Namen "DisplayName" existiert nicht und es wird auch im QueryString kein solcher Name übergeben.
Ein Label, dass den gleichen Inhalt wie die DropDown-Box hat, zeigt den erwarteten Text an.

Vielen Dank für Hinweise :)
15.05.2012 10:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 3.376
Entwicklungsumgebung: VS2010, VS2012, ReSharper
Herkunft: Stuttgart


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

* Benutz ViewModels und lass den ViewBag weg
* generiere eine Liste von SelectListItem direkt im Controller und gib dem korrekten Element den Eintrag Selected = true
!!! Die Logik gehört in den Controller - nicht in die View !!!

=> Problem weg
15.05.2012 10:50 Beiträge des Benutzers | zu Buddylist hinzufügen
Grumbler85 Grumbler85 ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.05.2008
Beiträge: 538
Entwicklungsumgebung: VS 2010
Herkunft: Rheingau Taunus

Themenstarter Thema begonnen von Grumbler85

Grumbler85 ist offline Füge Grumbler85 Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Leider funktioniert dein Vorschlag so nicht.

Ich habe es mal genauer betrachtet - ein Umbenennen von DisplayName > DisplayedName bringt den gewünschten Erfolg.

Lieber wäre es mir allerdings, wenn ich wüßte, warum das nicht mit "DisplayName" funktioniert.

Das auswählen und generieren einer SelectList aus einer anderen Liste kann man im Übrigen durchaus als "View-Logik" bewerten, weshalb es in der View stehen darf - zumindest hier bei uns.
15.05.2012 12:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt Abt ist männlich
myCSharp.de-Team (Moderation)

images/avatars/avatar-2981.png


Dabei seit: 20.07.2008
Beiträge: 3.376
Entwicklungsumgebung: VS2010, VS2012, ReSharper
Herkunft: Stuttgart


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Der Vorschlag funktioniert - nutz ich auf >100 Seiten :)

Controller:

C#-Code:
public ActionResult UserDetails( string userName = null )
{
   var myViewModel = new MyUserDetailsViewModel( );

   IEnumerable<MyUserEntity> users;
   using ( var userRepository = new UserRepository ( base.DbContext ) )
   {
       users = userRepository .GetAll( );
   }

   myViewModel.UserList = from user in users
                                       select new SelectListItem
                                       {
                                           Text = user.Name,
                                           Value = user.Name,
                                           Selected = ( userName != null && selectedName.Equals( user.Name, StringComparison.OrdinalIgnoreCase ) )
                                       };


return View("~....../UserDetails.cshtml", myViewModel);
}

View:
@Html.DropDownListFor(model => model.UserName, myViewModel.UserList);

Trotzdem ist es nicht mehr ratsam, auf ViewBag und Co zu setzen.
Es ist a) im Verhältnis langsam und b) absolut unsauber, da eben untypisiert und damit fehleranfällig.

Was DisplayedName sein soll seh ich hier nirgens; dmait kann ich Dir auch kein Grund nennen.
15.05.2012 12:50 Beiträge des Benutzers | zu Buddylist hinzufügen
Grumbler85 Grumbler85 ist männlich
myCSharp.de-Mitglied

Dabei seit: 13.05.2008
Beiträge: 538
Entwicklungsumgebung: VS 2010
Herkunft: Rheingau Taunus

Themenstarter Thema begonnen von Grumbler85

Grumbler85 ist offline Füge Grumbler85 Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich wollte nicht sagen, dass dein Vorschlag blödsinn ist - was aber mein Problem angeht, so liefert es keine Lösung.

Ich nun auch die ViewBags entfernt. Aber es bleibt dabei - model.DisplayName im DropDownListFor führt zum falschen markierten Eintrag.

Die Änderung der Selektion passiert beim Aufruf von DropDownListFor - vorher ist die Selektion ja korrekt. Und wie gesagt - ein anderer Name umgeht das Problem - das ist nicht optimal, aber reicht mir für den Moment.
Ich hätte gerne mit dem Debugger reingeschaut, aber weder der MS Symbol-Server noch Reflector erlauben mir das - und zum eindinden der MVC3 Quellen war ich .. nicht motiviert genug.
15.05.2012 14:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Jahr.
Der letzte Beitrag ist älter als ein Jahr.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 20.05.2013 00:40