2

У меня есть проблемы, чтобы установить выбранное значение по умолчанию для DropDownList с DropDownListFor в ASP MVC 4.DropDownListFor выбранное значение не работает со свойством в списке

Когда свойство, которое я хочу предварительно выбрать в списке он никогда выбранный по умолчанию, как ожидалось.

Вот мой код сводится к важной вещи:

Модели:

public class Renter 
{ 
    ... 
    public virtual List<RentLine> RentLines { get; set; } 
    ... 

    public Renter() 
    { 
     ... 
     RentLines = new List<RentLine>(); 
     ... 
    } 
} 

public class RentLine 
{ 
    ... 
    public Guid RenterId { get; set; } 
    public virtual Renter Renter { get; set; } 
    public Guid GarageId { get; set; } 
    public virtual Garage Garage { get; set; } 
    ... 

    public RentLine() 
    { 
     // 
     // Testcase for default value in dropdownlist 
     // 
     GarageId = new Guid("e926dcac-05ac-4fc1-92a2-014345e6e11c"); 
    } 
} 

Контроллер:

public ActionResult Hinzufuegen() 
{ 
    var model = new AddRenterViewModel(); 
    return View(model); 
} 

ViewModel:

public class AddRenterViewModel 
{ 
    public Renter Renter { get; set; } 

    public List<SelectListItem> RentableGarageItems { get; set; } 

    ... 

    public AddRenterViewModel() 
    { 
     Renter = new Renter(); 
     Renter.RentLines.Add(new RentLine()); 

     RentableGarageItems = new List<SelectListItem>(); 
     foreach (var garage in Singleton.Instance.Entities.GetRentableGarages().OrderBy(g => g.No)) 
     { 
      RentableGarageItems.Add(new SelectListItem{Text = garage.No.ToString(), Value = garage.Id.ToString()}); 
     } 
    } 
} 

Вид:

@model Grossgaragenverwaltung.ViewModels.AddRenterViewModel 
... 
Garage Nr. @Html.DropDownListFor(m => m.Renter.RentLines[0].GarageId, Model.RentableGarageItems) @* No selected value *@ 
      @Html.TextBoxFor(m => m.Renter.RentLines[0].GarageId) @* Shows the id 'e926dcac-05ac-4fc1-92a2-014345e6e11c' as set in the constructor *@ 
... 

Вот результат, не выбрано значение:

Garage Nr. 
<select id="Renter_RentLines_0__GarageId" name="Renter.RentLines[0].GarageId" data-val-required="Das Feld "GarageId" ist erforderlich." data-val="true"> 
<option value="225a761d-7d12-4e02-9d72-d54fb6934f05">1</option> 
<option value="d28fb4fb-d65b-4674-90d6-a4ab9636be80">2</option> 
<option value="e06b520b-e876-4870-b321-dc65f77967a7">3</option> 
<option value="56832d98-aa5a-4e1a-af44-2d7e00f2bb3a">4</option> 
<option value="551f1fa9-13a5-40ce-b795-50063e605027">5</option> 
<option value="bace4b40-92ab-4757-9716-2a2878c2c9e8">6</option> 
<option value="f9baf45b-96bf-463e-a234-a1522bfc9b9b">7</option> 
<option value="91d1d866-6346-4ab0-b2aa-35b56eeaf2b0">8</option> 
<option value="62eb3727-eab2-4180-90cd-7dc59119f44e">9</option> 
<option value="59768097-c772-4421-b907-a24397a106f5">10</option> 
<option value="270acf6b-e4e3-41c3-86dd-4381a313848a">11</option> 
<option value="923269cd-1ead-4346-90ce-6344acda5b1b">12</option> 
<option value="981ee61e-408b-4b08-a7d3-26c909f04a9d">13</option> 
<option value="f1c5043c-fe41-4a8e-8c58-e88363885de4">14</option> 
<option value="e926dcac-05ac-4fc1-92a2-014345e6e11c">15</option> 
<option value="5577dc00-7cfa-4bcd-99ad-3f356e4325ae">16</option> 
</select> 
<input id="Renter_RentLines_0__GarageId" type="text" value="e926dcac-05ac-4fc1-92a2-014345e6e11c" name="Renter.RentLines[0].GarageId"> 

Как я могу получить эту работу?

UPDATE: Вот рабочий пример, где все работает, как и следовало ожидать, эта проблема возникает только в том случае, если вы видите выше:

public class Renter 
{ 
    ... 
    public Salutation Salutation { get; set; } 
    ... 

    public Renter() 
    { 
     ... 
     Salutation = Salutation.Male; 
     ... 
    } 
} 

public ActionResult Hinzufuegen() 
{ 
    var model = new AddRenterViewModel(); 
    return View(model); 
} 

public class AddRenterViewModel 
{ 
    public Renter Renter { get; set; } 

    public List&lt;SelectListItem&gt; SalutationItems { get; set; } 

    ... 

    public AddRenterViewModel() 
    { 
     Renter = new Renter(); 
     Renter.RentLines.Add(new RentLine()); 

     SalutationItems = new List&lt;SelectListItem&gt;(); 
     foreach (Salutation salutation in Enum.GetValues(typeof(Salutation))) 
     { 
      SalutationItems.Add(new SelectListItem { Text = NameEnum.GetName(salutation), Value = salutation.ToString() }); 
     } 
    } 
} 

@Html.DropDownListFor(m =&gt; m.Renter.Salutation, Model.SalutationItems) 

&lt;select id="Renter_Salutation" name="Renter.Salutation" data-val-required="Das Feld "Salutation" ist erforderlich." data-val="true"&gt; 
&lt;option value="Company"&gt;Firma&lt;/option&gt; 
&lt;option value="Male" selected="selected"&gt;Männlich&lt;/option&gt; 
&lt;option value="Female"&gt;Weiblich&lt;/option&gt; 
&lt;/select&gt; 
+0

ли ниже ответ устранить проблему? – Spock

ответ

1

Вы отсутствуете Selected собственности в создании SelectedListItem. i.e Selected = (garage.Id == 2)

 var entities = new List<Guarage>() 
     { 
      new Guarage() {No = 1, Id = 1}, 
      new Guarage() {No = 2, Id = 2}, 
      new Guarage() {No = 3, Id = 3} 
     }; 

     foreach (var garage in entities) 
     { 
      var s = new SelectListItem 
      { 
       Text = garage.No.ToString(), 
       Value = garage.Id.ToString(), 
       Selected = (garage.Id == 2) 
      }; 
      RentableGarageItems.Add(s); 
     } 

Это было бы выбрано по умолчанию в раскрывающемся списке.

enter image description here

+1

Спасибо за ответ. Это работает, но оно должно быть в состоянии, не устанавливая выбранное значение в List of SelectListItems по двум причинам: 1. Я хочу использовать тот же список больше, чем в DropDownList с разными предварительно выбранными значениями. 2. Он работает идеально, пока я не хочу предварительно выбирать из свойства «глубже» в моем объекте модели. Пожалуйста, ознакомьтесь с моим обновленным сообщением выше. (Не может отправляться как комментарий, потому что он длинный). Здесь он работает без установки значения select в List of SelectListItems. – user3116990

Смежные вопросы