我正在尝试使用强类型的ViewModel而不是ViewBag来在下拉列表中显示数据。我希望得到用户的选择。
我的控制器代码如下所示:
public ActionResult Index()
{
ReportsHelper rh = new ReportsHelper();
List<SecurityProfile> securityProfiles = rh.GetSecurityProfiles();
List<SelectListItem> listItems = new List<SelectListItem>();
foreach (SecurityProfile secProf in securityProfiles)
{
SelectListItem item = new SelectListItem();
item.Value = secProf.SecurityProfileNum.ToString();
item.Text = secProf.SecurityProfileName;
listItems.Add(item);
}
var spvm = new SecurityProfileViewModel();
spvm.listItems = listItems;
return View(spvm);
}
我的ViewModel如下所示:
public class SecurityProfileViewModel
{
public IEnumerable<SelectListItem> listItems { get; set; }
}
我的观点如下:
@model ClearWeighWebReporting.ViewModels.SecurityProfileViewModel
@{
ViewBag.Title = "Index";
}
@Html.DropDownListFor(Model.listItems, "--Select One--")
上面的代码不起作用。我在以下的Controller代码行中遇到了构建错误:
spvm.listItems = listItems;
我在以下View代码行中收到错误:
@Html.DropDownListFor(Model.listItems, "--Select One--")
我做错了什么? 此外,如何让用户选择回来?
答案 0 :(得分:0)
向视图模型添加新属性以保存选定的选项值。
public class SecurityProfileViewModel
{
public int SelectedProfileNum { set;get;}
public IEnumerable<SelectListItem> listItems { get; set; }
}
现在在您的视图中,使用DropDownListFor帮助方法。
@Html.DropDownListFor(x=>x.SelectedProfileNum,Model.listItems,"Select--")
这将为name ="SelectedProfileNum"
一个建议 :在编写C#类时尝试使用PascalCasing并保持一致。您可以将listItems
重命名为ListItems