如何将逗号分隔值列表绑定到列表框

时间:2015-08-03 15:26:38

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-5

在我的asp.net mvc应用程序中,我有一个创建视图,我需要选择一个公司列表,所以我有这个:

@{
   var unitOfWork = new UnitOfWork();
   var empresas = unitOfWork.EmpresaRepository.Get();
 }
   <div class="form-group">
    @Html.Label("Empresa", new { @class = "control-label col-md-2" })

    <div class="col-md-10">
     @Html.ListBox("Empresa", new SelectList(empresas, "Id", "Nombre"), new { @class = "form-control" })
    </div>
   </div>

基本上我从我的存储库中选择所有公司然后我在列表框中渲染它们,当我点击保存时,所选公司被保存为逗号分隔的IDS列表,检查formcollection

 //Setting extended property lookup name
 var extPropLookupName = $"extension_{SettingsHelper.ClientId.Replace("-", "")}_{"Compania"}";

 //TO BE FINISHED
 user.SetExtendedProperty(extPropLookupName, formCollection["Empresa"]);
 await user.UpdateAsync();

现在我正在尝试实现EDIT视图。 所以我知道如何获得逗号分隔列表,我也知道如何获取公司列表,但ListBox应该显示哪些是SELECTED公司。

@{
   var unitOfWork = new UnitOfWork();
   var empresas = unitOfWork.EmpresaRepository.Get();
   var keyvaluepair = Model.GetExtendedProperties().Where(prop => prop.Key == extPropLookupName).FirstOrDefault();
   if (keyvaluepair.Value != null)
   {
   <div class="form-group">
   @Html.Label("Empresa", new { @class = "control-label col-md-2" })

     <div class="col-md-10">
      @Html.ListBox("Empresa", new SelectList(empresas, "Id", "Nombre"),  new { @class = "form-control" })
     </div>
   </div>
   }
}

现在它呈现公司列表但没有选中,我知道keyvaluepair.Value将有“1,2,3”。

如何将其绑定到列表框以便呈现所选项?

1 个答案:

答案 0 :(得分:2)

支持没有区别,您仍然可以利用视图模型以强类型方式处理数据。只需创建一个类,该类具有表示您希望在AD中使用的内容的属性,然后将AD值映射到此类或从此类映射。

然后,您可以执行以下操作:

public class UserViewModel
{
    ...

    public List<string> SelectedCompanies { get; set; }
}

在你的行动中:

var model = new UserViewModel
{
    ...

    SelectedCompanies = user.GetExtendedProperty(extPropLookupName).Split(',')
}

发帖后:

user.SetExtendedProperty(extPropLookupName, string.Join(",", model.SelectedCompanies);

然后,在您看来:

@Html.ListBoxFor(m => m.SelectedCompanies, new SelectList(empresas, "Id", "Nombre"),  new { @class = "form-control" })