Question

J'ai essayé beaucoup de différentes façons de passer les éléments sélectionnés dans la liste des multiselect sans chance. Enfin, j'ai essayé ce que je pense, devrait afficher tous les éléments comme sélectionné et toujours rien dans la liste est sélectionnée.

public MultiSelectList Companies { get; private set; }

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

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
     }
}

Voir:

<p>
    <label for="Companies">Company:</label>
    <%= Html.ListBox("Companies", Model.Companies) %>
    <%= Html.ValidationMessage("Companies", "*") %>
</p>
Était-ce utile?

La solution

Découverte de la question ici. Le MultiSelectList doit avoir un nom différent de la zone de liste. Fait ce changement et maintenant les deux versions du code de travail.

Autres conseils

constructeur a MultiSelectList quatrième paramètre - éléments sélectionnés. Utilisez-le:

http://msdn.microsoft .com / fr-fr / bibliothèque / system.web.mvc.multiselectlist.multiselectlist.aspx

Utilisez ce code:

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));

Est-ce que ça marche?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top