В списке множественного выбора не отображаются выбранные элементы в с # 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>

person RememberME    schedule 18.01.2010    source источник
comment
Какую версию mvc вы используете? Соответствует ли имя поля в представлении Model.FieldName?   -  person Alexander Taran    schedule 18.01.2010
comment
1.0 Имена такие же. Я вижу список, просто в нем ничего не выделено.   -  person RememberME    schedule 18.01.2010


Ответы (2)


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

person RememberME    schedule 28.01.2010

Конструктор 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));

Это работает?

person LukLed    schedule 18.01.2010
comment
Это был первый способ, которым я пытался это сделать. Я тоже не мог заставить это работать. Я надеялся, что если я выясню, что было не так, как описано выше, то смогу обнаружить, что я делаю неправильно. - person RememberME; 18.01.2010
comment
Значит, ты сделал что-то не так. Не конвертируйте c.company_id в строку. Это не нужно. - person LukLed; 18.01.2010
comment
Я знаю, что сделал что-то не так. Я пытаюсь узнать что. Когда у меня нет .ToString (), он жалуется. Невозможно неявно преобразовать тип System.Guid в строку. - person RememberME; 18.01.2010
comment
@RememberME: у меня работает этот код. У меня есть ListBox со всеми выбранными элементами. - person LukLed; 19.01.2010
comment
Нет, для меня ничего не выбрано. - person RememberME; 19.01.2010
comment
@RememberME: Вид выглядит нормально. Вы делаете все остальное, как я написал в своем ответе? - person LukLed; 19.01.2010
comment
Да, я просто дважды проверил, и все в точности так, как в вашем коде. - person RememberME; 19.01.2010
comment
@LukLed - Спасибо за помощь. Я обнаружил проблему. Смотри мой ответ - person RememberME; 29.01.2010