2010-01-18 29 views
8

He intentado de muchas formas diferentes pasar los elementos seleccionados a la lista de selección múltiple sin suerte. Finalmente, probé esto, que creo que debería mostrar todos los elementos como seleccionados y todavía no se selecciona nada en la lista.Lista de selección múltiple que no muestra los elementos seleccionados en C# mvc utilizando linq2sql

public MultiSelectList Companies { get; private set; } 

Companies = MulitSelectList(subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id), "Value", "Text"); 

en SubcontractRepository.cs:

public IEnumerable<SelectListItem> SubcontractCompanies(Guid id) 
{ 
    return c in db.companies 
    select new SelectListItem 
    { 
      Text = c.company_name, 
      Value = c.company_id.ToString(), 
      Selected = true 
    } 
} 

en Vista:

<p> 
    <label for="Companies">Company:</label> 
    <%= Html.ListBox("Companies", Model.Companies) %> 
    <%= Html.ValidationMessage("Companies", "*") %> 
</p> 
+0

¿Qué versión de mvc está utilizando? ¿El nombre del campo a la vista coincide con Model.FieldName? –

+0

1.0 Los nombres son los mismos. Veo la lista, simplemente no tiene nada seleccionado. – RememberME

Respuesta

8

Descubrió el problema aquí. MultiSelectList debe tener un nombre diferente al ListBox. Hizo ese cambio y ahora ambas versiones del código funcionan.

+0

+1 ¡Simplemente me salvó un montón de dolor tratando de resolver esto! :-) – klabranche

2

MultiSelectList constructor tiene cuarto parámetro - artículos seleccionados. Utilizarlo:

http://msdn.microsoft.com/en-us/library/system.web.mvc.multiselectlist.multiselectlist.aspx

Usar este código:

public class SelectCompanyItem 
{ 
    public string Name { get; set; } 
    public Guid Id { get; set; } 
} 

public IEnumerable<SelectCompanyItem> SubcontractCompanies(Guid id) 
{ 
    return c in db.companies 
    select new SelectCompanyItem 
    { 
      Name = c.company_name, 
      Id = c.company_id 
    } 
} 

var companiesList = subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id); 
Companies = new MultiSelectList(companiesList , "Id", "Name", companiesList.Select(a => a.Id)); 

Cómo funciona?

+0

Esa fue la primera forma en que intenté hacerlo. No pude hacer que eso funcione tampoco. Tenía la esperanza de que si me daba cuenta de lo que estaba mal arriba, podría descubrir lo que estaba haciendo mal. – RememberME

+0

Entonces hiciste algo mal. No convierta 'c.company_id' en una cadena. No es necesario – LukLed

+0

Sé que he hecho algo mal. Estoy intentando aprender qué. Cuando no tengo .ToString() se queja "No se puede convertir implícitamente el tipo 'System.Guid' en 'cadena'" – RememberME

Cuestiones relacionadas