ASPMVC4 如何使用视图模型和下拉列表获取用户选择?



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

最新更新