【发布时间】:2014-11-12 14:44:25
【问题描述】:
我正在使用作为遗留代码的MVC 应用程序。到目前为止,我所做的更改是两次调用以检索AccountDivisionModel 对象的列表。原始代码调用存储过程并返回一个ObjectResult,其中包含数据。
public class AccountDivisionModel
{
int DivisionID;
string DivisionName;
int AccountID;
bool IsActive;
}
我正在进行 2 次调用,以检索属于某个客户的部门列表和属于该客户联系人的(选定的)部门列表。
var aDivs = Account.GetDivisionByAccountID(c.AccountID).ToArray();
var cDivs = Contact.GetDivisionByContactID(c.ContactID).ToArray();
ViewBag.AccountDivisions = new MultiSelectList(aDivs, "DivisionID", "DivisionName", cDivs);
在我的编辑视图中
@Html.DropDownList("AccountDivisions", null, htmlAttributes: new { @class = "form-control", @multiple = "multiple", @placeholder = "Select Division(s)" })
我不知道为什么 SelectedValues 没有显示,即使当我单击文本框 (@placeholder) 时,我可以看到它填充了所有分区的下拉列表。
我做错了什么?
下面是当前工作界面的图片。如您所见,框中显示的 Selected Values 和下拉列表中显示了剩余的未被选中的项。
【问题讨论】:
-
您的意思是您希望看到基于某些值在列表中预先选择的某些选项?
-
是的。每当我来到这个页面时,我都会看到我之前添加到联系人中的部门。我可以从下拉列表中添加更多部门或删除预先选择的部门。
-
您用于创建
MultiSelectList的重载接受选定值的集合。由于您使用属性DivisionID作为选项值(我假设这是int),所以最后一个参数应该是IEnumerable<int>,其中包含您要选择的值。但是您确实应该考虑使用具有int[] SelectedDivisions之类的属性的视图模型,并使用@Html.ListBoxFor(m => m.SelectedDivisions, Model.AccountDivisions)` 绑定到它,这样您就可以立即获得所有正确的行为。 -
就是这样,斯蒂芬。 cDivs 需要是 List
,而不是(DivisionID 和 DivisionNames)的集合。感谢您的帮助。
标签: asp.net-mvc bootstrap-multiselect