我已经构建了一个包含HTML 5 select
列表的编辑页面,我可以根据模型中的数据找出将{1}}标记为正确项目的唯一方法是if语句。我只是想知道是否有更好的方法,因为我的小清单并不多,但对于较大的清单,必须有更好的方法。
控制器:
selected
查看:
[Route("Edit")]
public ActionResult EditSection(Int16 id = -1)
{
Section section = db.Sections.Find(id);
if (section == null)
{
return HttpNotFound();
}
return View(section);
}
答案 0 :(得分:1)
创建一个viewmodel,它具有一个collection属性来保存您的下拉项。
public class SectionEditViewModel
{
public Section Section { set;get;}
public List<SelectListeItem> Types { set;get;}
public string SelectedType { set;get;}
public SectionEditViewModel()
{
Section=new Section();
Types=new List<SelectListItem>();
}
}
在您的操作方法中,创建此视图模型的对象,设置属性值并将其发送到视图。
public ActionResult EditSection(Int16 id = -1)
{
Section section = db.Sections.Find(id);
if (section != null)
{
var vm=new SectionEditViewModel { Section=section};
vm.Types=GetTypes();
vm.SelectedType=section.Type;
return View(vm);
}
return View("NotFound");
}
假设GetTypes
方法将返回SelectListItem
public List<SelectListItem> GetTypes()
{
var list=new List<SelectListItem>();
list.Add(new SelectListItem { Value="Books", Text="Books"});
list.Add(new SelectListItem { Value="Movies", Text="Movies"});
list.Add(new SelectListItem { Value="Games", Text="Games"});
return list;
}
并在您的视图中强烈输入SectionEditViewModel
,
@model SectionEditViewModel
@using(Html.BeginForm())
{
<label>Type :</label> @Html.DropdownListFor(s=>s.SelectedType,Model.Types)
<input type="submit" />
}
发布表单时,您可以阅读SelectedType
属性值并保存
[HttpPost]
public ActionResult EditSection(SectionEditViewModel model)
{
//check model.SelectedType
//to do : Save and redirect;
}
答案 1 :(得分:1)
在控制器中
var ListOfTypes = new List<string>(){
"Game",
"Collection"
//etc
}
ViewBag.ListOfValues = ListOfTypes;
在视图中
<select id="Type" name="Type">
@foreach(string type in ViewBag.ListOfValues )
{
@if(type == Model.Type)
<option value="@type" selected="selected">@type</option>
else
<option value="@type">@type</option>
}
</select>