2014-12-05 65 views
0

我有问题在创建操作的视图中创建下拉列表。该视图只显示学号,标题和说明字段,并且对于程序和类别下拉列表没有任何显示。我不知道如何创建SelectList并将其传递给视图。我不知道这是否正确。为创建操作创建下拉列表

public class ServiceForm 
    { 
     [Required] 
     [Display(Name="Student Number")] 
     public int student_number { get; set; } 
     [Required] 
     [Display(Name="Program")] 
     public SelectList program { get; set; } 
     [Required] 
     [Display(Name = "Title")] 
     public string title { get; set; } 
     [Required] 
     [Display(Name = "Description")] 
     public string description { get; set; } 
     [Required] 
     [Display(Name = "Category")] 
     public SelectList category { get; set; } 

    } 
    public class Program 
    { 
     public int id { get; set; } 
     public string program_code { get; set; } 
     public string program_desc { get; set; } 
    } 

    public IEnumerable<ProgramList> GetAllPrograms() 
    { 
     var s = ds.programs.OrderBy(m => m.program_code); 
     return AutoMapper.Mapper.Map<IEnumerable<ProgramList>>(s); 
    } 

    private ServiceManager m = new ServiceManager(); 
    private ProgramManager pm = new ProgramManager(); 



    [HttpGet] 
    public ActionResult Create() 
    { 

     ServiceForm form = new ServiceForm(); 
     form.program = new SelectList(pm.GetAllPrograms(), "id", "program_code"); 
     List<SelectListItem> cat = new List<SelectListItem>(); 
     cat.Add(new SelectListItem() { Text = "General", Value = "General", Selected = true }); 
     cat.Add(new SelectListItem() { Text = "Grades", Value = "Grades", Selected = false }); 
     cat.Add(new SelectListItem() { Text = "Time Table", Value = "TimeTable", Selected = false }); 
     cat.Add(new SelectListItem() { Text = "Zenit Account", Value = "Zenit", Selected = false }); 
     form.program = new SelectList(cat, cat.ElementAt(0)); 
     return View(form); 
    } 

    [HttpPost] 
    public ActionResult Create(ServiceAdd newService) 
    { 
     if (!ModelState.IsValid) 
     { 
      var reform = AutoMapper.Mapper.Map<ServiceForm>(newService); 
      reform.program = new SelectList(pm.GetAllPrograms(), "id", "program_code"); 
      List<SelectListItem> cat = new List<SelectListItem>(); 
      cat.Add(new SelectListItem() { Text = "General", Value = "General", Selected = true }); 
      cat.Add(new SelectListItem() { Text = "Grades", Value = "Grades", Selected = false }); 
      cat.Add(new SelectListItem() { Text = "Time Table", Value = "TimeTable", Selected = false }); 
      cat.Add(new SelectListItem() { Text = "Zenit Account", Value = "Zenit", Selected = false }); 
      reform.program = new SelectList(cat, cat.ElementAt(0)); 
      return View(reform); 
     } 

     return RedirectToAction("Create"); 
    } 
+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2014-12-05 18:51:41

+0

好的...我会记住nxt时间 – Nakib 2014-12-05 18:53:15

回答

1

型号

public class ServiceForm 
     { 
      [Required] 
      [Display(Name="Student Number")] 
      public int student_number { get; set; } 
      [Required] 
      [Display(Name="Program")] 
      public SelectList Programs { get; set; } 

      public string SelectedProgram { get; set; } 

      [Required] 
      [Display(Name = "Title")] 
      public string title { get; set; } 
      [Required] 
      [Display(Name = "Description")] 
      public string description { get; set; } 
      [Required] 
      [Display(Name = "Category")] 
      public SelectList Categories{ get; set; } 

      public string SelectedCategory { get; set; } 

     } 

控制器

[HttpGet] 
public ActionResult Create() 
{ 

    ServiceForm form = new ServiceForm(); 


    List<SelectListItem> cat = new List<SelectListItem>(); 
    cat.Add(new SelectListItem { Text = "General", Value = "General", Selected = true }); 
    cat.Add(new SelectListItem { Text = "Grades", Value = "Grades", Selected = false }); 
    cat.Add(new SelectListItem { Text = "Time Table", Value = "TimeTable", Selected = false }); 
    cat.Add(new SelectListItem { Text = "Zenit Account", Value = "Zenit", Selected = false }); 
    form.Categories = cat; 

    //fill Programs property here... 

    return View(form); 
} 

查看

@model ServiceForm 

@using(Html.BeginForm(...)) 
{ 
    @Html.LabelFor(m=>m.Programs) 
    @Html.DropDownFor(x => x.SelectedProgram , Model.Programs) 
    @Html.LabelFor(m=>m.Categories) 
    @Html.DropDownFor(x => x.SelectedCategory, Model.Categories) 

} 
+0

没有必要设置'SelectListItem'的'Selected'属性。所选项目是属性“SelectedProgram”或​​“SelectedCategory”的值(所选属性被忽略) – 2014-12-05 22:47:41

0

你可以做这样的事情在你的控制器:

public ActionResult Create() 
{ 
    var data = new ServiceForm(); 
    data.Categories = new SelectList({"1", "category1"}, {"2", "category2"}); 
    return View(data); 
} 

[HttpPost] 
public ActionResult Create(ServiceForm form) 
{ 
    // validate the input and save 
} 

,并在你的Razor视图,你有这样的事情:

@model ServiceForm 

@using(Html.BeginForm()) 
{ 
    @Html.DropDownFor(x => x.SelectedCategory, Model.Categories) 
    <!-- ... other fields and labels --> 
} 
+0

它显示数据的无效表达式.Categories = new SelectList({“1”,“category1”},{“2”,“category2”}); – Nakib 2014-12-05 19:25:54

+0

可以检查吗? – Nakib 2014-12-05 19:34:15