2015-04-16 2 views
0

Я пытаюсь создать веб-приложение, которое позволит пользователям выбирать учебный курс из БД, а затем «применять» к этому курсу. Там приложение будет занесено в таблицу «CourseRequests».DropDownList позволяет пользователю выбрать «Имя», но создать «ID» в БД

У меня есть таблица под названием «InternalCourses»
У меня есть внесенный называемый «CourseRequests»

У меня есть построить страницу CREATE.CSHTML, которая позволяет пользователю выбрать курс, а затем нажмите «создать» его должен создать запись в соответствующей таблице. Моя проблема заключается в том, что мне нужно, чтобы пользователь выбрал имя курса и попросил программу отправить соответствующий идентификатор в базу данных и отказаться от courseame. Скриншот страницы выглядит так: LINK класс

My Controller:

// GET: CourseRequests/Create 
    public ActionResult Create() 
    { 
     ViewBag.InternalCourses = db.InternalCourses.ToList(); 
     ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "FirstName"); 
     ViewBag.ManagerID = new SelectList(db.Employees, "ManagerID", "FirstName"); 
     ViewBag.CourseID = new SelectList(db.ExternalCourses, "CourseID", "CourseName"); 
     ViewBag.CourseID = new SelectList(db.InternalCourses, "CourseID", "CourseName"); 
     ViewBag.CourseID = new SelectList(db.TrainingFeedbacks, "CourseID", "Question"); 
     return View(); 
    } 

Мои Create.cshtml

<!-- CourseID--> 
     <div class="form-group"> 
      @Html.LabelFor(model => model.CourseID, "CourseID", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownListFor(m => m.CourseID, new SelectList(ViewBag.InternalCourses, "CourseID", "CourseName"), new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.CourseID, "", new { @class = "text-danger" }) 
      </div> 

Мой (отношение) Диаграмма модели: DB Model изображение показывает ссылку от InternalCourse.CourseID, до CourseRequest.CourseID обратите внимание, что таблица CourseRequests, не содержит только идентификатор «CourseName».

Пожалуйста, может кто-нибудь посоветует мне, где я ошибаюсь, я вижу, что я пытаюсь поместить CourseName в поле ID, но не понимаю, как я могу это изменить.

ответ

3

Ну, для начала вы определяете ViewBag.CourseID три раза, что является общей тратой ресурсов, поскольку только в последний раз будет придерживаться. Первые два просто впустую запросы:

ViewBag.CourseID = new SelectList(db.ExternalCourses, "CourseID", "CourseName"); 
ViewBag.CourseID = new SelectList(db.InternalCourses, "CourseID", "CourseName"); 
ViewBag.CourseID = new SelectList(db.TrainingFeedbacks, "CourseID", "Question"); 

Далее, при использовании ViewBag для хранения выберите списки, вы должны быть осторожны, чтобы не затирать любой из ваших данных модели. Все, что есть в ModelState (в котором ViewBag является частью), отменяет что-либо на вашей модели. Поэтому вы никогда не сможете показать выбранное значение для свойства CourseID, если у вас есть список выбора, хранящийся в ViewBag.CourseID, потому что это значение всегда будет списком выбора, а не тем, что было выбрано. Используйте другое имя, например ViewBag.CourseChoices.

И, наконец, я не уверен, в чем проблема, с которой вы действительно сталкиваетесь. Нет никаких трудностей в том, чтобы показывать одну вещь как выбор в списке выбора, например, имя, а также передавать что-то еще, например, идентификатор. Конструктор SelectList должен называться в следующем формате:

new SelectList(listOfItems, propertyToUseAsValue, propertyToUseAsText) 

Таким образом, в вашем сценарии, до тех пор, как вы кормите его «CourseID» и «CourseName», в таком порядке, вы получите то, что вы хотите , Возможно, некоторые из этих других проблем, о которых я упоминал, на самом деле являются источником ваших проблем.

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