Asp.net выпадающий список mvc из базы данных с 2 данными

#asp.net-mvc

Вопрос:

Я пытаюсь создать выпадающий список из базы данных, в котором есть 2 значения (почтовый индекс и город). В моей таблице у меня есть только «Почтовый индекс» и «Город», что означает, что у меня нет идентификатора, и до сих пор я использовал свой почтовый индекс в качестве идентификатора.

Я хочу, чтобы в раскрывающемся списке отображалось «Выберите город».

  • Нью-Йорк 10001
  • Нью-Йорк 10010
  • Лос-Анджелес 90001
  • и т.д.

Но сейчас это проявляется только так:

  • НЬЮ-ЙОРК
  • НЬЮ-ЙОРК
  • Лос-Анджелес

Так что, если есть два Нью-Йорка, то вы не знаете, какой из них выбрать, так как нет почтового индекса. Я мог бы изменить, чтобы я показывал только почтовые индексы, а не города, и это работает, но я хочу показать и то, и другое.

В моих клиентах.cs у меня есть это:

 public partial class Customers {  public int CustomerId { get; set; }  public string Name { get; set; }  public string Address { get; set; }  public string ZipCode { get; set; }  public virtual Cities Cities { get; set; } }  

В моих городах.cs у меня есть это:

 public partial class Cities {  [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]  public Cities()  {  this.Customer = new HashSetlt;Customersgt;();  }   public string ZipCode { get; set; }  public string City { get; set; }   [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]  public virtual ICollectionlt;Customersgt; Customer { get; set; } }  

В моем файле create.cshtml у меня есть это:

 lt;div class="form-group"gt;  @Html.LabelFor(model =gt; model.ZipCode, "Cities", htmlAttributes: new { @class = "control-label col-md-2" })  lt;div class="col-md-10"gt;  @Html.DropDownList("ZipCode", null, htmlAttributes: new { @class = "form-control" })  @Html.ValidationMessageFor(model =gt; model.ZipCode, "", new { @class = "text-danger" })  lt;/divgt; lt;/divgt;  

В контроллере это выглядит так:

 public ActionResult Create() {  ViewBag.ZipCode = new SelectList(db.Cities, "ZipCode", "City");  return View(); }  

Как я могу это изменить? Я застрял..

Ответ №1:

Попробуй:

 ViewBag.ZipCode = db.Cities.Select(c =gt; new SelectListItem {  Value = c.ZipCode,  Text = $"{c.City} {c.ZipCode}", });  

Комментарии:

1. Ах, потрясающе, спасибо!! Это сработало 🙂