ASPMVC4如何使用ViewModel和下拉列表来选择用户?

时间:2017-03-30 00:50:11

标签: c# asp.net-mvc-4

我正在尝试使用强类型的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--")

我做错了什么? 此外,如何让用户选择回来?

1 个答案:

答案 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"

的SELECT元素生成标记

一个建议 :在编写C#类时尝试使用PascalCasing并保持一致。您可以将listItems重命名为ListItems