How would I generate a select list, where the text field, is made up of two or more text columns, eg: Where I have a Description and Rate field in my database, I want to combine these to show:
Large--£200 Medium--£150 Small--£100
Controller code is:
var stands = db.Stands.Where(s => s.ExhibitorID == null).ToList(); ViewBag.StandID = new SelectList(stands,"StandID", "Description" + "-- £" + "Rate");
...and my view is (currently):
<div class="editor-field"> @Html.DropDownList("StandID", "--Select--") </div>
...but the "Description" + "-- £" + "Rate"); won't run:
DataBinding: 'System.Data.Entity.DynamicProxies.Stand_63F8C9F623B3C0E57D3008A57081AFCD9C39E1A6B79B0380B60840F1EFAE9DB4' does not contain a property with the name 'Description--£Rate'.
Thanks for any help,
Mark
You could create a new anonymous class using a simple LINQ projection, and then use the SelectList(IEnumerable, string, string)
constructor overload to specify the value and text fields to be used for the <option>
elements i.e.:
var stands = db.Stands .Where(s => s.ExhibitorID == null) .Select(s => new { StandID = s.StandID, Description = string.Format("{0}-- £{1}", s.Description, s.Rate) }) .ToList(); ViewBag.StandID = new SelectList(stands, "StandID", "Description")
Edit
In C#6 and later, string interpolation makes for better reading than string.Format
... Description = $"{s.Description}-- £{s.Rate}"
If you project to a strong ViewModel
class name (instead of to an anonymous class), you will undoubtedly want to replace the magic strings with the safety of the nameof
operator:
ViewBag.StandID = new SelectList(stands, nameof(Stand.StandID), nameof(Stand.Description));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With