2013-12-18 49 views
2

財產工作,我有問題設置與DropDownListFor一個DropDownList的默認選定值在ASP MVC 4DropDownListFor選擇的值不會名單

當我想預選屬性列表中它永遠不會按預期默認選擇。

這裏是我的代碼減少到重要的東西:

型號:

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); 
} 

視圖模型:

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

你丟失的SelectedListItem創建選擇財產。即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); 
     } 

這將在默認情況下在下拉列表中選擇2。

enter image description here

+1

感謝您的回覆。這是行得通的,但它必須能夠在沒有在SelectListItems列表中設置所選值的情況下出現兩個原因:1.我想在具有不同預選值的DropDownList上使用相同的列表。 2.直到我想從我的模型對象中的「更深」屬性中預先選擇,它才能完美運行。請看看我上面更新的帖子。 (不能發送評論,因爲它很長)。這裏它沒有在SelectListItems列表中設置選擇值。 – user3116990