有没有更好的方法在下拉列表中设置所选项?

时间:2013-12-30 00:02:32

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

我已经构建了一个包含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);
    }

2 个答案:

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