2010-07-28 121 views
1

我想創建一個下拉列表,但我正在努力如何顯示它。DropDownList MVC C#

我有以下代碼。

控制器

  var trader = new DisplayTradersAttachedToCategoryViewModel 
      { 
       Description = data.Description, 
       Id = data.Id, 
       BusinessName = traders.Select(x => new BusinessNameViewModel { BusinessName = x.BusinessName, Id = x.Id }), 
       Categories = _service.GetCategories().Select(x => new DropDownViewModel {Id = x.Id, Description = x.Description }).OrderBy(x=>x.Description) 
      }; 

DisplayTradersAttachedToCategoryViewModel

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

    [UIHint("BusinessNameDisplayTemplate")] 
    public IEnumerable<BusinessNameViewModel> BusinessName { get; set; } 

    [UIHint("DropDownEditorTemplate")] 
    public IEnumerable<DropDownViewModel> Categories { get; set; } 
} 

DropDownViewModel

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

DropDownEditorTemplate

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Internal.ViewModels.Controller.DropDownViewModel>>" %> 
<table class="aligncenter"> 
    <tr class="tRow left"><% 
    if (Model != null) 
    {%> 
     <td> 
     <%=Html.DropDownList("Category", Model.)%> 
     </td><% 
    }%>       
    </tr> 
</table> 

我不知道我的意思,以DropDownList的範圍內提供,或者如果我實際上這樣做是正確的。

UPDATE

控制器

  var trader = new DisplayTradersAttachedToCategoryViewModel 
      { 
       Description = data.Description, 
       Id = data.Id, 
       BusinessName = traders.Select(x => new BusinessNameViewModel { BusinessName = x.BusinessName, Id = x.Id }), 
       Categories = _service.GetCategories().Select(x => new SelectListItem() {Text = x.Description, Value = x.Id.ToString(), Selected = true}) 
      }; 

DisplayTradersAttachedToCategoryViewModel

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

    [UIHint("BusinessNameDisplayTemplate")] 
    public IEnumerable<BusinessNameViewModel> BusinessName { get; set; } 

    public IEnumerable<SelectListItem> Categories { get; set; } 

    public int Category { get; set; } 

    public string Button { get; set; } 

DeleteCategoryAttachedToTraders.aspx

using (Html.BeginForm("DeleteCategoryFromTradersAttachNewCategory", "Controller",FormMethod.Post)) 
    <%=Html.DropDownList("Categories")%> 

控制器

[HttpPost] 
      public ActionResult DeleteCategoryFromTradersAttachNewCategory(DisplayTradersAttachedToCategoryViewModel displayTradersAttachedToCategoryViewModel) 
      { 
       if (displayTradersAttachedToCategoryViewModel.Button == "Back to List") return RedirectToAction("ViewCategories"); 

      //Update traders with new category 
      //delete category 

      //if (_service.DeleteCategory((int)deleteCategoryViewModel.Id)) 
      //{ 
      // return RedirectToAction("ViewCategories"); 
      //} 

      return View("DeleteCategoryAttachedToTraders", displayTradersAttachedToCategoryViewModel); 
     } 

當我訪問通過提交按鈕沒有任何控制器存儲在DisplayTradersAttachedToCategoryViewModel內。我究竟做錯了什麼?

在此先感謝您的幫助。

克萊爾

回答

0

感謝ŁukaszW.pl/ ajay_whiz對你有所幫助: - )最後我用了兩種答案的混合物:

控制器

Categories = _service.GetCategories(id).Select(x => new SelectListItem {Text = x.Description, Value = x.Id.ToString()}) 

DisplayTradersAttachedToCategoryViewModel

public IEnumerable<SelectListItem> Categories { get; set; } 

DeleteCategoryAttachedToTraders.aspx

<%=Html.DropDownList("Category", Model.Categories)%> 
2

嘗試這樣的:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Tameside.Internal.ViewModels.BuyWithConfidence.DropDownViewModel>>" %> 
<select> 
    <% foreach(var category in Model.Categories) { %> 
     <option value="<%= Html.Encode(category.Id) %>"><%= Html.Encode(category.Name %></option> 
    <% } %> 
</select> 

ofcourse編號和名稱只是成員了我的頭。使用你的類別類中的那些。

+0

謝謝你,這就像一種享受。 – ClareBear 2010-07-28 10:48:15

+0

感謝您的接受...很快見到您:) – 2010-07-28 10:51:40

+0

如何命名選擇列表?此時該值不會通過視圖模型返回。 – ClareBear 2010-07-28 13:56:11

0

你可以試着將它鑄造成(IEnumerable<SelectListItem>)

<%=Html.DropDownList("Category", (IEnumerable<SelectListItem>)Model.Categories)%> 

- 或 -

創建類型的SelectList 的模型屬性,你可以初始化它當作

new SelectList(Categories.ToList(), "ID", "Description"); 
+0

此演員表不會工作..如何將類別轉換爲SelectListItem? 另外...你給一個完整的對象作爲DropDownList助手的參數,在我看來,它不能識別應該顯示什麼,以及它應該在它生成的html代碼中的值成員。 – 2010-07-28 10:45:25

+0

嘗試一下,看看...我也給了它的替代...而不是寫每個聲明,你可以用SelectList – 2010-07-28 13:01:56

+0

你好ajay_whiz,我想你的方式,但你可以看看我的文章因爲數據沒有通過視圖模型傳遞 – ClareBear 2010-07-29 07:00:00