Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[erledigt] MultiSelectList: Selected Values werden nicht markiert!
Steffo
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

[erledigt] MultiSelectList: Selected Values werden nicht markiert!

beantworten | zitieren | melden

Hallo,
ich habe ein unglaublich popliges Problem, dass ich mit der SelectList nicht habe!
Ich will in einer MultiSelectList einfach Einträge markieren!

Hier mein Code dazu:

private void PopulateFields(IEnumerable<int> selMembers = null, IEnumerable<string> selLang = null, IEnumerable<int> selLeaders = null)
        {
            List<int> mem = new List<int> { 1, 2 }; // Test mit Dummy!
            List<String> lang = new List<String> { "DE", "EN" }; // Test mit Dummy!

            ViewBag.Members = new MultiSelectList(db.LoginUsers, "PersonID", "FullName", mem);
            ViewBag.Languages = new MultiSelectList(db.Language, "Abbreviation", "Name", lang);
            ViewBag.Teamleaders = new MultiSelectList(db.Teamleader, "PersonID", "FullName", selLeaders);
        }

Damit ihr seht, dass die Values tatsächlich richtig sind, habe ich vom Firefox-CodeInspector für Language ein paar Options rauskopiert. Hier sollte bei "DE" z. B. ein "selected" stehen. Tut es aber nicht!
<select id="Languages" name="Languages" multiple="multiple">
    <option value="AF"> … </option>
    <option value="AR"> … </option>
    <option value="DA"> … </option>
    <option value="DE"> … </option>
</select>
Jemand eine Idee, weshalb das nicht klappt?

Danke im Voraus!

Liebe Grüße
Steffo
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Steffo am .
private Nachricht | Beiträge des Benutzers
Steffo
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

beantworten | zitieren | melden

Ich habe meinen Code nun auf das Nötigste reduziert und es wird nun immer noch nichts vorselektiert. Wo kann der Fehler nur sein?!

List<Language> lLang = new List<Language> 
            { 
                new Language { Abbreviation = "DE", Name = "German" }, 
                new Language { Abbreviation = "IT", Name = "Italian" } 
            };

ViewBag.Languages = new MultiSelectList(lLang, "Abbreviation", "Name", new string[] { "DE", "IT" });

Edit.cshtml
<div class="editor-label">
        @Html.LabelFor(model => model.SpokenLanguages)
</div>
<div class="editor-field">
        @Html.ListBox("Languages", ViewBag.Languages as MultiSelectList)
</div>

Danke im Voraus!

L. G.
Steffo
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Steffo am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

a) arbeite mit ViewModels
b) lass den ViewBag weg - das ist Mist
c) arbeite mit der SelectList bzw. mit SelectListItem
d) lass die HTML Helper weg und mach das von Hand und sauberem HTML-Code.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Steffo
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

beantworten | zitieren | melden

Ich hätte schon Interesse daran zu wissen wo der Fehler liegt und weniger daran ein Breitband-Antibiotikum um die Ohren geschlagen zu bekommen, wo ich nicht weiß, ob ich den Fehler dann immer noch habe...

EDIT: Zumal SelectList nicht meine Anforderung abdeckt mehrere Einträge markieren zu können!

L. G.
Steffo
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Steffo am .
private Nachricht | Beiträge des Benutzers
Peter Bucher
myCSharp.de - Experte

Avatar #jVxXe7MDBPAimxdX3em3.jpg


Dabei seit:
Beiträge: 6141
Herkunft: Zentralschweiz

beantworten | zitieren | melden

Hallo Steffo

Wenn du die Entwicklung ernst nimmst und dir Qualität und vermeiden von Fehlerquellen lieb ist, nimm die Ratschläge von Abt an.

Den Fehler hast du nicht mehr, wenn du von Hand das HTML aus der Liste erzeugst, ausser du baust den gleichen Fehler von Hand ein, was unwahrscheindlich ist.

Recht hast du sicherlich, das es trotzdem interessant wäre, woran der Fehler liegt.
Ich hatte einmal ein ähnliches Problem. Damals lag es an einer Überladung die nicht passte.

Am besten suchst du dafür einmal Englisch nach deinem Problem. Du findest bestimmt etwas.


Gruss Peter
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Peter Bucher am .
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

- https://peterbucher.ch/ - Meine persönliche Seite
- https://fpvspots.net/ - Spots für FPV Dronenflüge
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Doch, die SelectListItem funktioniert.
Schau meine Tipps wenigstens an statt große Töne zu spucken, wenn Du keine Ahnung hast. Sorry, wenns so deutlich ist.

- Erstelle eine List<SelectListItem>
- Füge alle Sprachen hinzu
- Setze von allen Sprachen, die selektiert werden sollen, das Selected-Property auf True
- In der View iterierst Du über alle Einträge und setzt selcted="selected" bei den entsprechen selektierten Options

Eine Select und eine MultpleSelectList ist auf HTML Seite identisch, außer, dass die zweite Variante eben noch das multiple-Attribut besitzt. Von der Erstellung aber absolut identisch.

@Peter: danke.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Steffo
myCSharp.de - Member



Dabei seit:
Beiträge: 45

Themenstarter:

beantworten | zitieren | melden

Hallo,
wie es aussieht, habe ich die API einfach falsch verwendet. So geht's:
<div class="editor-field">
        @Html.ListBox("Languages")
</div>

Ich habe den zweiten Parameter "ViewBag.Languages as MultiSelectList" einfach weg gelassen, da dort selektierte Werte erwartet werden und keine MultiSelectList-Instanz. Die selektierten Werte definiere ich ja schon im Controller, deswegen reicht es hier einfach nur den Key der ViewBag anzugeben.

Warum will ich nicht in Plain-HTML programmieren? Ich denke, wenn man das MVC-Framework erst mal richtig kennt, dann kann man damit effizienter arbeiten und der Code wird auch übersichtlicher. Es graust mir ein wenig in der View über Elemente zu iterieren. Das mache ich zwar vereinzelnd, aber eben nur dort, wo es nicht anders geht.
Ich möchte eure Kompetenzen sicherlich nicht Abrede stellen, sondern denke einfach nur, dass meine Herangehensweise einfach eine andere ist. Aber die Kritik bzgl. ViewModels akzeptiere ich voll und ganz und werde früher oder später wohl darauf zurückgreifen müssen.

Soweit vielen Dank für eure Hilfe!

L. G.
Steffo
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Zitat von Steffo
Warum will ich nicht in Plain-HTML programmieren? Ich denke, wenn man das MVC-Framework erst mal richtig kennt, dann kann man damit effizienter arbeiten und der Code wird auch übersichtlicher.
Genau das ist ein riesen Trugschluss und Anfängerfehler.

Warum statischen Code dynamisch ausführen wollen? Warum zwanghaft anonyme Übergaben erzwingen? Warum nicht auf Best Practices hören? Warum Magic Strings verwenden, die unfassbar hohen Wartungsaufwand nach sich ziehen?
Das ist kontraproduktiv für die komplette Performance. Bei einem Request ist das egal; bei hunderten oder gar tausenden aber ein Genickbruch.

Du bist neu im Bereich ASP.NET MVC; ich seit 6 Jahren dabei.
Aber jeder muss die Fehler erst mal selbst machen, bevor ers einsieht ;-) Es ist alles ein gut gemeinter Rat; aber manchmal muss man erst mal auf die Schnauze fallen, um was zu lernen und die Ratschläge der andren anzunehmen.
Die Frage ist hier nicht ob, sondern wann ;-).
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Ahrimaan
myCSharp.de - Member



Dabei seit:
Beiträge: 363
Herkunft: Thorn

beantworten | zitieren | melden

Ich würde gerne wissen ob es Messungen gibt mit Unterschieden zwischen zB Listfor und PlainHTML ?

Ansonsten gebe ich dir mit MagicStrings etc absolut recht ;-)
Leider lebt MS es aber einem anders vor :/
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ahrimaan am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16152

beantworten | zitieren | melden

Ja, ich hatte mir mal die Mühe mit ein paar HTML Helpern gemacht.
Der schlimmste war ActionLink.

Ich hab die zahlen nich im Kopf aber aufgeschrieben; aber es war so "drastisch", dass ich die Dinger verflucht habe und sie seitdem nicht wieder verwende und jedem kategorisch abrate. ASP MVC4 Custom AuthorizeAttribute, wenn AllowMultiple = true ist
Wie gesagt.. so nen einzelner Request ist nicht tragisch. Das merkt keine Sau. Aber bei 15.000 Requests pro Sekunde (und manchmal deutlich weniger) merkste das enorm.

Im mag MS. Ich mag MVC. Das muss also schon richtig beschissen sein, dass ich davon in diesem Umfeld abrate ;-)
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers