2012-01-01 10 views
7

tengo estas propiedades VM¿Cómo se muestran los múltiples seleccionados con asp.net mvc 3 y ListBoxFor?

public IList<Guid> SelectedEligiableCategories { get; set; } 
    public IList<SelectListItem> EligiableCategories { get; set; } 

tengo este ayudantes en mi opinión

@Html.LabelFor(x => x.EligibleCategoryFrmVm.SelectedEligiableCategories, "Eligible Categories:") 
    @Html.ListBoxFor(x => Model.EligibleCategoryFrmVm.SelectedEligiableCategories, Model.EligibleCategoryFrmVm.EligiableCategories, new { @class = "eligibleCategoryListBox" }) 

tengo este código en mi regulador

List<SelectListItem> eligibleCategoriesListItems = Mapper.Map<List<EligibleCategory>, List<SelectListItem>>(eligibleCategories); 
    foreach (var rewardTier in creditCard.RewardTiers) 
     { 
      CbRewardTierFrmVm rewardTierFrmVm = new CbRewardTierFrmVm(); 
      rewardTierFrmVm.EligibleCategoryFrmVm.EligiableCategories = eligibleCategoriesListItems; 

      foreach (var ec in rewardTier.EligibleCategories) 
      { 
       rewardTierFrmVm.EligibleCategoryFrmVm.SelectedEligiableCategories.Add(ec.Id); 
      } 

      vm.CbRewardTierFrmVm.Add(rewardTierFrmVm); 
     } 

Sin embargo, cuando la carga hasta mi punto de vista. Ninguno de los valores para mi ListBox están seleccionados. No estoy seguro por qué. Si se tratara de una lista de selección, esto funcionaría, ya que coincidiría con SelectedEligiableCategories con el valor de la lista.

No estoy seguro de si esto se debe a que hay múltiples selecciona

Editar

<select name="CbRewardTierFrmVm[63b504c0-0f9a-47ba-a8ff-db85f48d5f0f].EligibleCategoryFrmVm.SelectedEligiableCategories" multiple="multiple" id="CbRewardTierFrmVm_63b504c0-0f9a-47ba-a8ff-db85f48d5f0f__EligibleCategoryFrmVm_SelectedEligiableCategories" data-val-required="Must choose at least one eligible category." data-val="true" class="eligibleCategoryListBox ui-wizard-content ui-helper-reset ui-state-default" style="display: none;"> 
    <option value="ed2bb5f9-4565-4f69-ab15-9fca011c0692">Gas</option> 
</select> 

¿Cree que es porque estoy usando http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/?

Edit2

me ido por delante y hacer un ejemplo. Debo extrañar algo (no estoy seguro de qué). Cuando uso "Darin Dimitrov" funciona.

Cambié el ejemplo a un menú desplegable, ya que estoy teniendo el mismo problema con él también.

En este ejemplo, no estoy usando un modelo de vista ya que mi suposición inicial era de alguna manera que la ayuda que estaba usando de Steven Sanders podría estar afectando así que me estaba yendo de su ejemplo.

Esto no parece ser el caso, ya que lo eliminé y sigo teniendo este problema.

public class Gift 
    { 
     public string Name { get; set; } 
     public double Price { get; set; } 
     public string SelectedItem { get; set; } 
     public IList<SelectListItem> Items { get; set; } 
    } 


public ActionResult Index() 
    { 
     List<SelectListItem> items = new List<SelectListItem> 
     { 

       new SelectListItem {Value = "",Text ="--"}, 
       new SelectListItem {Value = "1",Text ="1"}, 
       new SelectListItem {Value = "2",Text ="2"}, 
     }; 


     var initialData = new[] { 
      new Gift { Name = "Tall Hat", Price = 39.95, Items = items, SelectedItem = "2" }, 
      new Gift { Name = "Long Cloak", Price = 120.00, Items = items, SelectedItem = "1" } 
     }; 

     return View("Index3",initialData); 
    } 

@model IList<EditorDemo.Models.Gift> 

@{ 
    ViewBag.Title = "Index3"; 
} 

@for (int i = 0; i < Model.Count; i++) 
{ 
    @Html.DropDownListFor(x => x[i].SelectedItem, new SelectList(Model[i].Items, "Value", "Text")) 
} 

parece no ser capaz de manejar cuando se pone en forloop y probarlo hace más de una lista desplegable.

+0

Tengo una muestra completa en http://code.msdn.microsoft.com/Using-the-DropDownList-67f9367d – RickAndMSFT

Respuesta

12

El siguiente funciona para mí.

Modelo:

public class MyViewModel 
{ 
    public IList<Guid> SelectedEligiableCategories { get; set; } 
    public IList<SelectListItem> EligiableCategories { get; set; } 
} 

controlador:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyViewModel 
     { 
      SelectedEligiableCategories = new[] 
      { 
       // preselect the second and the fourth item 
       new Guid("35830042-3556-11E1-BCDC-A6184924019B"), 
       new Guid("4253876A-3556-11E1-BC17-B7184924019B") 
      }.ToList(), 

      EligiableCategories = new[] 
      { 
       new SelectListItem { Value = "2DA62E3A-3556-11E1-8A0A-9B184924019B", Text = "item 1" }, 
       new SelectListItem { Value = "35830042-3556-11E1-BCDC-A6184924019B", Text = "item 2" }, 
       new SelectListItem { Value = "3D07EBAC-3556-11E1-8943-B6184924019B", Text = "item 3" }, 
       new SelectListItem { Value = "4253876A-3556-11E1-BC17-B7184924019B", Text = "item 4" }, 
      } 
     }; 
     return View(model); 
    } 
} 

Vista:

@model MyViewModel 

@using (Html.BeginForm()) 
{ 
    @Html.ListBoxFor(
     x => x.SelectedEligiableCategories, 
     Model.EligiableCategories, 
     new { @class = "eligibleCategoryListBox" } 
    ) 
} 

Resultado:

enter image description here


ACTUALIZACIÓN:

Ahora que ha mostrado un ejemplo que permite ilustrar el problema, puede especificar el elemento seleccionado en la construcción de la SelectList:

@Html.DropDownListFor(
    x => x[i].SelectedItem, 
    new SelectList(Model[i].Items, "Value", "Text", Model[i].SelectedItem) 
) 

La razón por un valor que no se preselecciona fue porque estaba vinculando la lista desplegable a una lista de propiedades (x => x[i].SelectedItem) mientras que en mi ejemplo yo estaba usando una propiedad simple.

Y si se quería hacer esto con el ayudante ListBoxFor podría utilizar el siguiente:

@Html.ListBoxFor(
    x => x[i].SelectedItems, 
    new MultiSelectList(Model[i].Items, "Value", "Text", Model[i].SelectedItems) 
) 

La propiedad SelectedItems se convierte en una colección y se utiliza un MultiSelectList en lugar de un SelectList.

+0

Parece más o menos lo que tengo. Me pregunto por qué no funciona para mí. – chobo2

+0

Ver Editar html sin formato. – chobo2

+0

@ chobo2, no sé, he mostrado una versión funcional. Tal vez le gustaría, de la misma manera que lo hice, proporcionar un ejemplo completo que ilustre su problema. El modelo de vista, el controlador (con valores codificados) y la vista serían bienvenidos para permitir que las personas reproduzcan el problema y, con suerte, lo ayuden a resolverlo. –

3

El principal problema está utilizando

@Html.DropDownListFor 

en lugar de esta

@Html.ListBoxFor 

Utilizando el DropDownListFor no le ayudará con múltiples valores, lo que haces y no importa lo que su modelo es. Una vez que use ListBoxFor ... ¡automáticamente funcionará!

+0

reproducido! Perdí ese – Chev

Cuestiones relacionadas