我无法在dropdownlistfor上设置默认值

时间:2016-04-28 15:26:11

标签: c# asp.net-mvc

我有一个构造函数,它传入一个对象的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")

2 个答案:

答案 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是具有IdName属性的项目集合,

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");