Adewagold Ответов: 2

Загрузка выпадающего списка в entity framework


Здравствуйте, я новичок в Entity Framework с MVC
Я создал свои модельные классы факультета и кафедры.
public class Faculty
  {
      [Key]
      public int FacultyID { get; set; }

      [Required(ErrorMessage = "Enter Faculty Name")]
      [Display(Name = "Faculty Name")]
      public string FacultyName { get; set; }

      public virtual ICollection<Department> Departments { get; set; }
  }

public class Department
   {
       [Key]
       public int Id { get; set; }

       //[Required(ErrorMessage ="Enter Department ID")]
       //[Display(Name ="Department ID")]
       //public string departmentID { get; set; }

       [Required(ErrorMessage = "Enter Department Name")]
       [Display(Name = "Department Name")]
       public string DepartmentName { get; set; }

       public virtual Faculty Faculty { get; set; }


       [Required(ErrorMessage = "Select Faculty")]
       [Display(Name = "Faculty")]
       public int FacultyID { get; set; }
   }

Поэтому я сгенерировал представление для этих двух моделей
Поле для идентификатора факультет создание кафедры выглядит следующим образом.
<div class="form-group">
            @Html.LabelFor(model => model.FacultyID, "FacultyID", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("FacultyID", null, htmlAttributes: new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.FacultyID, "", new { @class = "text-danger" })
            </div>
        </div> 




Итак, как я могу использовать viewbag для отображения списка факультетов в раскрывающемся списке в представлении? Спасибо

Что я уже пробовал:

Я попытался использовать Viewbag в действии создания отдела
public ActionResult Create()
        {
            ViewBag.FacultyID = new SelectList(db.Faculties, "FacultyID", "FacultyName");
            return View();
        }

2 Ответов

Рейтинг:
17

David_Wimbley

Я бы рекомендовал передать это через модель. Кроме того, я не думаю, что вы можете использовать SelectList в MVC для DropDownListFor, я думаю, что вы должны использовать список SelectListItem (или IEnumerable).

Таким образом, синтаксис DropDownListFor может быть таким простым, как это

@Html.DropDownListFor(m=>m.Name, new List<SelectListItem>(), new{@class="form-control"})


m=>m.Name это имя свойства для вашей модели, а новый список & lt;selectlistitem> - Это ваша коллекция элементов для отображения в раскрывающемся списке. Но обратите внимание, что если вы не используете модель в своем представлении, вы не можете использовать DropDownListFor, вместо этого просто DropDownList будет работать, так как он не сильно типизирован.

@Html.DropDownList("Name", new List<SelectListItem>(), new{@class="form-control"})


Более рабочий пример был бы чем-то похожим на следующее

действие контроллера

public ActionResult Index()
        {
            var list = new List<People>();
            list.Add(new People { Name = "David" });
            list.Add(new People { Name = "Thom" });

            var selectList = new List<SelectListItem>();

            foreach (var item in list)
            {
                selectList.Add(new SelectListItem { Text = item.Name, Value = item.Name});
            }

            return View(selectList);
        }


Вид - Индекс.cshtml по

@model IEnumerable<SelectListItem>

@{
    ViewBag.Title = "Home Page";
}


@Html.DropDownList("Name", Model, new{@class="form-control"})


Но чтобы использовать viewbag, вы бы сделали то же самое, но вместо модели вы просто делаете

Контроллер

public ActionResult Index()
        {
            var list = new List<People>();
            list.Add(new People { Name = "David" });
            list.Add(new People { Name = "Thom" });

            var selectList = new List<SelectListItem>();

            foreach (var item in list)
            {
                selectList.Add(new SelectListItem { Text = item.Name, Value = item.Name});
            }

            ViewBag.Items = selectList;

            return View();
        }


@Html.DropDownList("Name", ViewBag.Items, new{@class="form-control"})


Рейтинг:
0

Maheshbhushan_Kshirsagar

Цитата:
Правильно направленный David_Wimbley, создание строго типизированного представления-это хорошо...


В случае, если вы заинтересованы в использовании строго типизированного представления, выполните 3 шага, как показано ниже;
1. Создайте viewmodel, который будет содержать список кафедр и факультетов
public class DepartmentViewModel
    {
        public Department Department { get; set; }
        public List<Faculty> Faculty { get; set; }
    }



2. Контроллер будет
public ActionResult Create()
        {
            //assuming faculty list is created somewhere else
            var DepartmentViewModel = new DepartmentViewModel { Faculty=faculties};
            return View(DepartmentViewModel);
        }


3. и вид будет (при необходимости этот выпадающий список также может быть создан как частичный вид)
@model DropDownListDemo.Models.DepartmentViewModel

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        @Html.DropDownListFor(model => model.Department.FacultyID, new SelectList(Model.Faculty, "FacultyID", "FacultyName"));
    </div>
}