2014-12-05 2 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/), где консенсус« нет, они не должны ». –

+0

ok ... я буду помнить, что nxt время – Nakib

ответ

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

Нет смысла устанавливать свойство 'Selected'' SelectListItem'. Выбранным элементом является значение свойства 'SelectedProgram' или' SelectedCategory' (выбранное свойство игнорируется) –

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

показывает недопустимое выражение для data.Categories = new SelectList ({"1", "category1"}, {"2", "category2"}); – Nakib

+0

можно проверить? – Nakib

Смежные вопросы