2011-09-18 55 views
0

我想創建一個下拉列表中的自定義集合類 如在MVC3

public class MyCustomClassCollection 
{ 

public List<MyCustomClass> {get;set;} 

} 

我想讓它顯示的說明顯示所有創造價值的下拉列表:每個MyCustomClass

我試圖

<%: Html.DropDownList "Description", MyCustomClass %> 

ReSharper的建議我投MyCustomClass到IEnemerable

但服務器返回無法投射錯誤。

任何想法我怎麼能創造這個DropDownList的?

__變形_ __

public class ViewModel 
    { 
     public Detail detail { get; set; } 
    } 

public class Detail //Inherited from webservce 
{ 
    public CustomClassCollection {get;set;} 
    .... Other Properties, a.k.a Custom Classes 
} 


public class CustomClassCollection 
{ 
    public List<CustomClass> {get;set;} 
} 

public class CustomClass { 
    public int Id {get;set;} 
    public string Description{get;set;} 
    ... other properties 

} 


public ActionResult Index(int? id, DateTime? date) 
     { 
      if (id.Equals(null)) 
       id = ######### ; 
      if (date.Equals(null)) 
       date = DateTime.Today; 
      var vm = new ViewModel 
         { 
          Detail = _repository.Detail((int)id,(DateTime)date) 
         }; 
      return View(vm); 
     } 

回答

3

DropDownList輔助的第二個參數必須是IEnumerable<SelectListItem>或實現此接口爲此事SelectList。因此,在您的控制器中,以這種方式組織您的自定義集合並將其轉換爲IEnumerable<SelectListItem>。與往常一樣,你可以寫一個視圖模型開始:

public class MyViewModel 
{ 
    public string SelectedDescription { get; set; } 
    public SelectList Descriptions { get; set; } 
} 

,然後讓你的控制器操作查詢的自定義列表,並填充將被傳遞到視圖視圖模型:

public ActionResult Index() 
{ 
    var descriptions = yourCustomCollection.MyCustomClass.Select(x => new 
    { 
     Value = x.Description, 
     Text = x.Description 
    }); 
    var model = new MyViewModel 
    { 
     Descriptions = new SelectList(descriptions, "Value", "Text") 
    }; 
    return View(model); 
} 

最後在你的強類型的視圖:

<%= Html.DropDownListFor(x => x.SelectedDescription, Model.Decriptions) %> 

UPDATE:

發佈更新後的模型(其中的方式仍然是不完整的,也不可能編譯因爲你沒有提供任何屬性名稱)後,這裏有一個例子:

public class ViewModel 
{ 
    public int SelectedId { get; set; } 
    public Detail Detail { get; set; } 
} 

public class Detail 
{ 
    public CustomClassCollection MyCollection { get; set; } 
} 


public class CustomClassCollection 
{ 
    public List<CustomClass> CustomClass { get; set; } 
} 

public class CustomClass 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
} 

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var vm = new ViewModel 
     { 
      Detail = new Detail 
      { 
       MyCollection = new CustomClassCollection 
       { 
        CustomClass = new List<CustomClass> 
        { 
         new CustomClass 
         { 
          Id = 1, 
          Description = "description 1", 
         }, 
         new CustomClass 
         { 
          Id = 2, 
          Description = "description 2", 
         }, 
         new CustomClass 
         { 
          Id = 3, 
          Description = "description 3", 
         }, 
        } 
       } 
      } 
     }; 
     return View(vm); 
    } 
} 

,並在視圖:

<%= Html.DropDownListFor(
    x => x.SelectedId, 
    new SelectList(Model.Detail.MyCollection.CustomClass, "Id", "Description") 
) %> 

你有什麼,以確定在ASP.NET MVC IUS一個下拉列表,你需要兩件事情明白:

  1. 綁定個標量屬性E組的值(在我的例子SelectedId
  2. 集合綁定列表(Model.Detail.MyCollection.CustomClass中的例子)
+0

這不工作我不能選擇過去的定製集合。然後它開始給我選擇,如選擇,其中... –

+0

@Antarr伯德,這個自定義集合是怎麼樣的?你所顯示的代碼甚至不會編譯。請提供對象層次結構中涉及的對象的完整描述。 –

+0

我會在上面發佈修改後的代碼,通過web服務訪問數據而不是LINQ –