如何将逗号分隔值列表绑定到列表框
How to bind a list of comma separated values to a Listbox
在我的 asp.net mvc 应用程序中,我有一个创建视图,我需要在其中 select 公司列表,所以我有这个:
@{
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>
基本上我 select 我存储库中的所有公司然后我将它们呈现在列表框中,当我点击保存时 selected 公司被保存为逗号分隔的 IDS 列表,检查表单集合
//Setting extended property lookup name
var extPropLookupName = $"extension_{SettingsHelper.ClientId.Replace("-", "")}_{"Compania"}";
//TO BE FINISHED
user.SetExtendedProperty(extPropLookupName, formCollection["Empresa"]);
await user.UpdateAsync();
现在我正在尝试实现 EDIT 视图。
所以我知道如何获取逗号分隔列表,我也知道如何获取公司列表,但是列表框应该显示哪些是选定的公司。
@{
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>
}
}
现在它呈现公司列表,但是 none selected,我知道 keyvaluepair.Value 会有“1,2,3”。
如何将它绑定到列表框,以便它呈现 selected 项目?
支持没有区别,您仍然可以利用视图模型以强类型方式处理数据。只需创建一个 class,它具有表示您要在 AD 中使用的内容的属性,然后将您的 AD 值 to/from 映射到此 class.
然后,您可以执行以下操作:
public class UserViewModel
{
...
public List<string> SelectedCompanies { get; set; }
}
在你的行动中:
var model = new UserViewModel
{
...
SelectedCompanies = user.GetExtendedProperty(extPropLookupName).Split(',')
}
在post之后:
user.SetExtendedProperty(extPropLookupName, string.Join(",", model.SelectedCompanies);
那么,在您看来:
@Html.ListBoxFor(m => m.SelectedCompanies, new SelectList(empresas, "Id", "Nombre"), new { @class = "form-control" })
在我的 asp.net mvc 应用程序中,我有一个创建视图,我需要在其中 select 公司列表,所以我有这个:
@{
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>
基本上我 select 我存储库中的所有公司然后我将它们呈现在列表框中,当我点击保存时 selected 公司被保存为逗号分隔的 IDS 列表,检查表单集合
//Setting extended property lookup name
var extPropLookupName = $"extension_{SettingsHelper.ClientId.Replace("-", "")}_{"Compania"}";
//TO BE FINISHED
user.SetExtendedProperty(extPropLookupName, formCollection["Empresa"]);
await user.UpdateAsync();
现在我正在尝试实现 EDIT 视图。 所以我知道如何获取逗号分隔列表,我也知道如何获取公司列表,但是列表框应该显示哪些是选定的公司。
@{
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>
}
}
现在它呈现公司列表,但是 none selected,我知道 keyvaluepair.Value 会有“1,2,3”。
如何将它绑定到列表框,以便它呈现 selected 项目?
支持没有区别,您仍然可以利用视图模型以强类型方式处理数据。只需创建一个 class,它具有表示您要在 AD 中使用的内容的属性,然后将您的 AD 值 to/from 映射到此 class.
然后,您可以执行以下操作:
public class UserViewModel
{
...
public List<string> SelectedCompanies { get; set; }
}
在你的行动中:
var model = new UserViewModel
{
...
SelectedCompanies = user.GetExtendedProperty(extPropLookupName).Split(',')
}
在post之后:
user.SetExtendedProperty(extPropLookupName, string.Join(",", model.SelectedCompanies);
那么,在您看来:
@Html.ListBoxFor(m => m.SelectedCompanies, new SelectList(empresas, "Id", "Nombre"), new { @class = "form-control" })