2010-07-28 3 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 или если я на самом деле делать это правильно.

ОБНОВЛЕНИЕ

Контроллер

  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. Что я делаю не так?

Заранее благодарим за любую помощь.

Clare

ответ

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> 

Id и конечно Название являются только члены из моей головы. Используйте те, которые находятся в вашем классе категории.

+0

Спасибо, это работает как лечить. – ClareBear

+0

Спасибо, что приняли ... скоро увидим :) –

+0

Как назвать список выбора? В настоящий момент значение не возвращается через модель представления. – ClareBear

0

Вы можете попробовать лить его в (IEnumerable<SelectListItem>) i.e.

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

-или-

создать модель свойство типа SelectList и вы можете инициализировать его как

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

Этот актер не работает. Как он может отличать категорию от SelectListItem? Также ... Вы передаете целый объект в качестве параметра помощнику DropDownList, и, на мой взгляд, он не может распознать, что должно отображаться, и что должно быть членом value в HTML-коде, который он генерирует. –

+0

попробуйте и посмотрите ... также я дал ему альтернативу ... вместо того, чтобы писать для каждого заявления, вы можете сделать это с помощью SelectList –

+0

Здравствуйте, ajay_whiz, я пытаюсь это сделать, но можете ли вы посмотреть мой пост снова, поскольку данные не проходят через viewmodel – ClareBear