2012-08-29 32 views
22
@Html.DropDownListFor(m => m.branch, CommonMethod.getBranch("",Model.branch), "--Select--", new { @multiple = "multiple" }) 

@Html.DropDownListFor(m => m.division, CommonMethod.getDivision(Model.branch,Model.division), "--Select--", new { @multiple = "multiple" }) 

Tengo dos instancias de DropDownListFor. Quiero establecer seleccionado como verdadero para aquellos que han almacenado previamente valores para Model.branch y Model.division. Estas son las matrices de cadenas de identificadores deObtener varios valores seleccionados en Html.DropDownlistFor

almacenados
class CommonMethod 
{ 
    public static List<SelectListItem> getDivision(string [] branchid , string [] selected) 
    { 
     DBEntities db = new DBEntities(); 
     List<SelectListItem> division = new List<SelectListItem>(); 
     foreach (var b in branchid) 
      { 
       var bid = Convert.ToByte(b); 
       var div = (from d in db.Divisions where d.BranchID == bid select d).ToList(); 
       foreach (var d in div) 
       { 
        division.Add(new SelectListItem { Selected = selected.Contains(d.DivisionID.ToString()), Text = d.Description, Value = d.DivisionID.ToString() }); 
       } 
      } 
     } 

     return division; 
    } 
} 

El valor devuelto de la división se selecciona tan cierto para el elemento seleccionado en el modelo, pero en vista lateral no está seleccionado.

+0

que no entiendo su pregunta. ¿Es simplemente * Cómo establecer un valor seleccionado en la lista desplegable? * – Mohayemin

+0

Sí, quiero que se seleccionen los valores que están almacenados en la base de datos previamente en la carga de la página. – user

Respuesta

43

Utilice un ListBoxFor en lugar de DropDownListFor:

@Html.ListBoxFor(m => m.branch, CommonMethod.getBranch("", Model.branch), "--Select--") 

@Html.ListBoxFor(m => m.division, CommonMethod.getDivision(Model.branch, Model.division), "--Select--") 

Los branch y division propiedades deben ser obviamente colecciones que contendrán los valores seleccionados.

Y un ejemplo completo de la forma correcta de construir un selecto menú desplegable múltiple utilizando una vista de modelo:

public class MyViewModel 
{ 
    public int[] SelectedValues { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

que se rellena en el controlador:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 

    // preselect items with values 2 and 4 
    model.SelectedValues = new[] { 2, 4 }; 

    // the list of available values 
    model.Values = new[] 
    { 
     new SelectListItem { Value = "1", Text = "item 1" }, 
     new SelectListItem { Value = "2", Text = "item 2" }, 
     new SelectListItem { Value = "3", Text = "item 3" }, 
     new SelectListItem { Value = "4", Text = "item 4" }, 
    }; 

    return View(model); 
} 

y en la vista:

@model MyViewModel 
... 
@Html.ListBoxFor(x => x.SelectedValues, Model.Values) 

Es el asistente HTML que preselecciona automáticamente los elementos cuyos valores coinciden con t manguera de la propiedad SelectedValues.

+0

Gracias. Funciona como quiero – user

+2

ListboxPara guardarme ... Más claro por qué dropdwnlist no funciona en este escenario ... – ksg

+0

¿Qué ocurre si quiero mostrar todos los valores y luego pedirle al usuario que seleccione varias opciones y publicar varias opciones seleccionadas después de que el usuario envíe? ¿Es posible con el enfoque anterior? Si no podría por favor hágamelo saber cómo se hace ... Pude haber creado una pregunta por separado, pero siento que esta respuesta está muy cerca de lo que deseo ... –

8

Para mí funciona también para @Html.DropDownListFor:

Modelo:

public class MyViewModel 
{ 
    public int[] SelectedValues { get; set; } 
    public IEnumerable<SelectListItem> Values { get; set; } 
} 

controlador:

public ActionResult Index() 
{ 
    var model = new MyViewModel(); 

    // the list of available values 
    model.Values = new[] 
    { 
     new SelectListItem { Value = "2", Text = "2", Selected = true }, 
     new SelectListItem { Value = "3", Text = "3", Selected = true }, 
     new SelectListItem { Value = "6", Text = "6", Selected = true } 
    }; 

    return View(model); 
} 

Razor:

@Html.DropDownListFor(m => m.SelectedValues, Model.Values, new { multiple = "true" }) 

selectedValues ​​sometidas en el controlador parece:

enter image description here enter image description here

+0

La diferencia es que ya ha configurado los valores de los elementos de lista seleccionados, en Valores de modelo, y usted no usa los Valores seleccionados. Intente eliminar "selected = true" y agregue algunos int a SelectedValues, luego no funciona como se esperaba. No para mí de todos modos. –

Cuestiones relacionadas