2015-03-11 3 views
2

Я хотел бы иметь раскрывающийся список, который извлекает данные из таблицы квалификаций, а затем на HttpPost сохраняет значение, выбранное в раскрывающемся списке, в столбце «квалификация» на таблица сотрудников. Я очень новичок в MVC, и я не очень хорошо знаю синтаксис. Я также не знаю, как использовать jquery, vb и т. Д., Так что извините, если есть сообщение, которое охватывает это, и я не видел его, потому что не знаю, на что я смотрю.MVC DropDownList заполняется из одной таблицы БД и отправляется в другую таблицу БД

Это в настоящее время моя лучшая попытка сделать это:

Контроллер:

private Database1Entities db = new Database1Entities(); 
... 
... 
... 
    // GET: /Home/CreateEmp 
      public ActionResult CreateEmp() 
      { 
       ViewBag.QualList = new SelectList(db.Qualifications, "Id", "qual"); 
       return View(); 
      } 
      // POST: /Home/CreateEmployee 
      [HttpPost, ActionName("CreateEmployee")] 
      public ActionResult CreateEmpResult(Employee emp) 
      { 
       if (ModelState.IsValid) 
       { 
        db.Employees.Add(emp); 
        db.SaveChanges(); 
        return RedirectToAction("Index"); 
       } 
       ViewBag.QualList = new SelectList(db.Qualifications, "Id", "qual", emp.qualification); 
       return View(emp); 
      } 

Создать Служащий Вид:

@model MvcDropDownList.Models.Employee 
    @using (Html.BeginForm("CreateEmployee", "Home", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 
     <table> 
     <!-- other fields removed for sake of simplicity --> 
     <tr> 
      <td> 
       @Html.Label("Select Your Qualification:") 
      </td> 

      <td> 
       @Html.DropDownList("QualList", "--Select--") 
      </td> 
     </tr> 
    </table> 
    } 

Таблица Структура:

Квалификация Таблица: Id, каче

Таблица Employee: Id, ПгвЬЫате, ФАМИЛИЯ, пол, квалификация

Мой код успешно получает данные из таблицы "Квалификация", но не отправляет это в столбец «квалификация» в таблице «employee».

Любые предложения будут признательны, спасибо!

ответ

1

Вы должны привязать свой раскрывающийся список к модели, которую вы возвращаете, при нажатии кнопки «Сохранить».

Другими словами, это:

@Html.DropDownList("QualList", "--Select--") 

должен превратиться в нечто вроде этого:

@Html.DropDownListFor(model => model.Qualification_Id, (SelectList)ViewBag.QualList) 

Редактировать Как Стивен Муеке отметил, что вам нужно, чтобы привести значение Viewbag к SelectList ,

Примечание Существует множество возможностей для DropDownListFor(). Я только выбрал самый простой для ясности, но вы можете добавить дополнительную метку и т.д.

Это связывает его с вашей моделью (emp):

public ActionResult CreateEmpResult(Employee emp) 

Примечание: Если ваш Employee класс был правильно настроить и иметь необходимые внешние ключи (ссылка на таблицу квалификаций), должно быть уже .Qualification_Id (или подобное имя) в вашем классе Employee (при условии, что класс является вашей фактической базой данных).

Эти изменения будут охватывать все, что вам нужно:

  • DropDownList Теперь записывает выбранное значение в emp.Qualification_Id.
  • В вашем методе контроллера вы сохраняете emp на db.
  • EF будет использовать поля FK (emp.Qualification_Id), чтобы убедиться, что правильные значения будут записаны в новой строке Employee, которая будет создана в базе данных.

Как правило, всегда пытайтесь привязать элементы управления (dropdownlists, textboxes, ...) к свойству вашей модели. если вы это сделаете, вам не нужно писать определенный код, чтобы сделать в основном то же самое.

+0

Обратите внимание, что это должно быть '@ Html.DropDownListFor (m => m.Qualification_Id, (SelectList) ViewBag.QualList)' - вам нужно использовать 'ViewBag.QualList' –

+0

Я думал, что MVC5 исправил это, но вы, похоже, быть правым. Обновление ответа :) – Flater

+0

ясно, что мне что-то не хватает ... Я установил таблицу сотрудников с помощью «qualId» FK и добавил следующий код в вид: '@ Html.DropDownListFor (m => m. QualId, (SelectList) ViewBag.QualList) ' В контроллере, пост действие имеет: ' ViewBag.QualList = новый SelectList (db.Qualifications, "Идентификатор", "каче", emp.qualId); ' Я думал, что это сработает, я что-то упустил? –

0

я не знаю, если это поможет, но я сделал класс модели, который создает несколько списков, которые я буду использовать в течение моего приложения один из списков выглядит следующим образом: -

SKTDATABASEEntities db = new SKTDATABASEEntities(); public List 
 
<Department>Departments { get { return db.Departments.ToList(); } }

мое имя класса является ThingLists, то оттуда я его экземпляр в моем классе контроллера, как: -

public ActionResult CreateTask() { ThingLists deps = new ThingLists(); var de = from t in deps.Departments select t.Department_Name; ViewData["depies"] = de;

и отображать его на мой взгляд, как: -

<label for="Task">Department</label> 
 
<div class="editor-field"> 
 
    <%: Html.DropDownList("lsttasks", new SelectList((IEnumerable)ViewData[ "depies"], "Department"), new { id="drop1" })%> 
 
    <br /> 
 
</div>

и отлично работает при отображении моего DropDownList, кто-то предложил я использовать JavaScript для назначения выбранного элемента, как: -

< script type = "text/javascript" > 
 
    function onSelectedIndexChanged(select) { 
 
     var text = $("drop1").valueOf(); 
 
     document.getElementById('drop1').innerHTML = text; 
 
    } < /script>

и в этой части я все еще получаю null в своем контроллере, возможно, вы можете куда-то добраться оттуда. :-) Я все еще жду ответа на свой вопрос, но если кто-то ответит на что-то, я поделюсь с вами.

+0

Извините, проигнорируйте мой ответ, даже не отвечая. Ответ @ Stephen работает отлично, я просто попробовал это :-) Я должен вам !!!! – sean

+0

рад, что это сработало для вас. Спасибо за ваш вклад! :-) –

0

@oli_taz использовать мой код выше и видеоданные вместо viewbag я просто должен был изменить свой взгляд на

<%: Html.DropDownListFor(model=>model.Department,new SelectList((IEnumerable)ViewData["depies"], "Department")) %>

он получает значения из таблицы базы данных «отделы» и заполняет список, созданный в thinglists.cs, и когда я его сохраню, он сохраняет точно мое выбранное значение в моей таблице «задач». Надеюсь, я объяснил это достаточно ясно.

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