2010-01-18 5 views
8

Я пробовал много разных способов передать выбранные элементы в список мультиселектов без везения. Наконец, я попробовал это, что, я думаю, должно отображать все элементы как выбранные, и ничто в списке не выбрано.Список мультиселекций, не показывающий выбранные элементы в C# mvc, используя linq2sql

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

в Вид:

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

Какую версию mvc вы используете? Имеет ли имя поля в поле зрения Model.FieldName? –

+0

1.0 Имена одинаковы. Я вижу список, у него просто ничего не выбрано. – RememberME

ответ

8

Обнаружили проблему здесь. В MultiSelectList должно быть другое имя из списка. Сделали это изменение, и теперь обе версии кода работают.

+0

+1 Просто спас меня от боли, пытаясь понять это !!!! :-) – klabranche

2

MultiSelectList конструктор имеет четвертый параметр - выбранные элементы. Использование:

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

Используйте этот код:

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

ли работа?

+0

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

+0

Итак, вы сделали что-то не так. Не конвертируйте 'c.company_id' в строку. Это не нужно. – LukLed

+0

Я знаю, что я сделал что-то неправильно. Я пытаюсь узнать, что. Когда у меня нет .ToString(), он жалуется: «Невозможно неявно преобразовать тип« System.Guid »в« string »« – RememberME