我继续前进,然后回到这里,但我仍然无法让它工作。
var companiesList = subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id);
IEnumerable<Guid> selectedList = companiesList.Select(a => a.Id);
Companies = new MultiSelectList(companiesList, "Id", "Name", selectedList);
在SubcontractRepository.cs
中 public class SelectCompanyItem
{
public string Name { get; set; }
public Guid Id { get; set; }
}
public IEnumerable<SelectCompanyItem> SubcontractCompanies(Guid id)
{
return
from c in db.companies
select new SelectCompanyItem
{
Name = c.company_name,
Id = c.company_id
};
}
查看:
<p>
<label for="Companies">Company:</label>
<%= Html.ListBox("Companies", Model.Companies) %>
<%= Html.ValidationMessage("Companies", "*") %>
</p>
制作了html:
<p>
<label for="Companies">Company:</label>
<select id="Companies" multiple="multiple" name="Companies"><option value="4cf411d0-e111-488b-822f-ea194951cfda">Second Company</option>
<option value="1c21e613-a668-4817-bf6d-73befb8c9dbd">Test Company</option>
</select>
</p>
答案 0 :(得分:8)
我找到了解决方案。 ListBox必须与MultiSelectList具有不同的名称。我在原始代码中重命名了MultiSelectList,它可以工作。我甚至不想开始考虑我花在这上面的时间!
答案 1 :(得分:1)
现在这是一个丑陋的工作。使用您想要选择的值设置ViewData。
ViewData["Companies"] = new string[] { "guid-1", "guid-2" };
我仍在尝试调试,看看为什么会这样。令人惊讶的是,MVC项目中此用例的单元测试工作正常。