使用视图模型属性填充一个下拉列表:MVC 5,Razor [英] Populate a drop down list with view model property: MVC 5, Razor
问题描述
我有一个带有一些属性的视图,并想为其创建一个下拉框.到目前为止,我已经在控制器上创建了一个selectListItems列表,并为其添加了值,此刻,它可以正常工作并在下拉列表中显示项目.但是,我的问题是它根本没有链接到我在视图模型中拥有的属性.我该如何修改?
控制器:
List< SelectListItem>Jobs = new List< SelectListItem>();SelectListItem job1 = new SelectListItem(){文本="Email",Value ="1",Selected = false};SelectListItem job2 = new SelectListItem(){文本="OtherJob",Value ="2",Selected = false};SelectListItem job3 = new SelectListItem(){文本="OtherJob2",Value ="3",Selected = false};SelectListItem job4 = new SelectListItem(){文本="OtherJob3",Value ="4",Selected = false};SelectListItem job5 = new SelectListItem(){文本="OtherJob4",Value ="5",Selected = false};SelectListItem job6 = new SelectListItem(){文本="OtherJob5",Value ="6",Selected = false};SelectListItem job7 = new SelectListItem(){文本="OtherJob6",Value ="7",Selected = false};SelectListItem job8 = new SelectListItem(){文本="OtherJob7",Value ="8",Selected = false};jobs.Add(job1);jobs.Add(job2);jobs.Add(job3);jobs.Add(job4);jobs.Add(job5);jobs.Add(job6);jobs.Add(job7);jobs.Add(job8);ViewBag.jobs =工作;返回View();
ViewModel:
公共对象Job {get;放;}
查看:
@using(Html.BeginForm(FormMethod.Post)){< center>< div class ="form-group">@ Html.DropDownList("jobs",(IEnumerable< SelectListItem>)ViewBag.jobs)</div></center>
您传递给 DropDownList
的 name
参数是错误的.要正确绑定,应与viewmodel属性名称相同:
@ Html.DropDownList("Job",(IEnumerable< SelectListItem>)ViewBag.jobs)
由于您具有强类型的视图模型,因此最好使用 DropDownListFor
帮助器并将相应的viewmodel属性类型更改为与 SelectListItem.Value
属性类型相同.另外,您还可以使用类型为 IEnumerable< SelectListItem>
的属性来消除 ViewBag
使用中的类型转换,并将其直接分配给 DropDownListFor
:>
模型
公共类ViewModel{public int Job {获取;放;}公共列表< SelectListItem>乔布斯{get;放;}}
控制器
[HttpGet]公共ActionResult ControllerName(){var model = new ViewModel();model.Jobs = new List< SelectListItem>();model.Jobs.Add(new SelectListItem(){Text ="Email",Value ="1",Selected = false});//在此处分配其他SelectListItem列表值返回View(model);}
查看
@model ViewModel@using(Html.BeginForm("ActionName","ControllerName",FormMethod.Post)){< div style ="text-align:center">< div class ="form-group">@ Html.DropDownListFor(m => m.Job,Model.Jobs)</div></div>}
I've got a view with a few properties and want to create a drop down box for it. So far, I've created a list of selectListItems on my controller and added values to it and at the moment, it works and displays the items in the drop down list. However, my problem is that it's not linked at all to the property I have in my view model. How can I amend this?
controller:
List<SelectListItem> jobs = new List<SelectListItem>();
SelectListItem job1 = new SelectListItem() { Text = "Email", Value = "1", Selected = false };
SelectListItem job2 = new SelectListItem() { Text = "OtherJob", Value = "2", Selected = false };
SelectListItem job3 = new SelectListItem() { Text = "OtherJob2", Value = "3", Selected = false };
SelectListItem job4 = new SelectListItem() { Text = "OtherJob3", Value = "4", Selected = false };
SelectListItem job5 = new SelectListItem() { Text = "OtherJob4", Value = "5", Selected = false };
SelectListItem job6 = new SelectListItem() { Text = "OtherJob5", Value = "6", Selected = false };
SelectListItem job7 = new SelectListItem() { Text = "OtherJob6", Value = "7", Selected = false };
SelectListItem job8 = new SelectListItem() { Text = "OtherJob7", Value = "8", Selected = false };
jobs.Add(job1);
jobs.Add(job2);
jobs.Add(job3);
jobs.Add(job4);
jobs.Add(job5);
jobs.Add(job6);
jobs.Add(job7);
jobs.Add(job8);
ViewBag.jobs = jobs;
return View();
ViewModel:
public object Job { get; set; }
View:
@using (Html.BeginForm(FormMethod.Post))
{
<center>
<div class="form-group">
@Html.DropDownList("jobs", (IEnumerable <SelectListItem>)ViewBag.jobs)
</div>
</center>
Your name
argument passed to DropDownList
is wrong. It should be same as viewmodel property name to bind properly:
@Html.DropDownList("Job", (IEnumerable<SelectListItem>)ViewBag.jobs)
Since you have strongly-typed viewmodel, better to use DropDownListFor
helper and change corresponding viewmodel property type to be same as SelectListItem.Value
property type. Also you can eliminate cast from ViewBag
usage by using a property which has type of IEnumerable<SelectListItem>
and assign it directly to DropDownListFor
:
Model
public class ViewModel
{
public int Job { get; set; }
public List<SelectListItem> Jobs { get; set; }
}
Controller
[HttpGet]
public ActionResult ControllerName()
{
var model = new ViewModel();
model.Jobs = new List<SelectListItem>();
model.Jobs.Add(new SelectListItem() { Text = "Email", Value = "1", Selected = false });
// assign other SelectListItem list values here
return View(model);
}
View
@model ViewModel
@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post))
{
<div style="text-align:center">
<div class="form-group">
@Html.DropDownListFor(m => m.Job, Model.Jobs)
</div>
</div>
}
这篇关于使用视图模型属性填充一个下拉列表:MVC 5,Razor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!