我有一个构造函数,它传入一个对象的IEnumerable,然后从 SelectList 类型的公共变量中公开它。在cshtml文件中它已被映射到DropDownListFor并且下拉列表填充正常,但是当我尝试将“未选择”附加到下拉列表时它不会显示在屏幕中,例如。
视图模型的构造函数:
IEnumerable<Partner> beneficiaryNames
在构造函数中设置值:
BeneficiaryNames = new SelectList(beneficiaryNames, "Id", "Name");
viewmodel中的声明:
public SelectList BeneficiaryNames { get; set; }
然后在我看来:
@Html.DropDownListFor(m => m.SearchRequest.BeneficiaryId, Model.BeneficiaryNames, "None selected")
答案 0 :(得分:0)
您应该在视图模型中添加一个简单的值类型属性来保存选定的值。
public class YourViewModel
{
IEnumerable<SelectListItem> beneficiaryNames { set;get;}
public int? BeneficiaryId { set;get;}
}
现在在您的视图中,在DropDownListFor
辅助方法中使用此新属性。
@model YourViewModel
@Html.DropDownListFor(s=>s.BeneficiaryId,Model.beneficiaryNames,"None selected")
要选择项目,请在GET操作中设置视图模型的BeneficiaryId值。假设beneficiaryNames
是具有Id
和Name
属性的项目集合,
public ActionResult Edit(int id)
{
var vm = new YourViewModel();
vm.beneficiaryNames= beneficiaryNames.Select(s=>new SelectListItem {
Value=s.Id.ToString(),
Text=s.Name }).ToList();
vm.BeneficiaryId=2; // Will select the option with value 2, (Record with Id 2)
return View(vm);
}
答案 1 :(得分:0)
在视图模型的构造函数中,我必须强制一个新对象进入列表。所以我不得不用BeneficiaryNames = new SelectList(beneficiaryNames, "Id", "Name");
List<Partner> newList = new List<Partner>() { new Partner { Id = 0, Name = "None Selected" } };
newList.AddRange(beneficiaryNames);
BeneficiaryNames = new SelectList(newList, "Id", "Name");