我正在尝试使用强类型的 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);
}
我的视图模型如下所示:
public class SecurityProfileViewModel
{
public IEnumerable<SelectListItem> listItems { get; set; }
}
我的视图如下所示:
@model ClearWeighWebReporting.ViewModels.SecurityProfileViewModel
@{
ViewBag.Title = "Index";
}
@Html.DropDownListFor(Model.listItems, "--Select One--")
上面的代码不起作用。我在以下控制器代码行上收到构建错误:
spvm.listItems = listItems;
我在以下视图代码行上收到错误:
@Html.DropDownListFor(Model.listItems, "--Select One--")
我做错了什么? 此外,如何恢复用户选择?
向视图模型添加新属性以保存选定的选项值。
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"
的 SELECT 元素生成标记
一个建议:在编写C#类时尝试使用PascalCasing并保持一致性。您可以将listItems
重命名为ListItems