2010-07-28 118 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