2015-02-18 2 views
0

Кажется, я получаю сообщение об ошибке при попытке изменить выпадающее меню даже до загрузки страницы. Вот ошибка: Исключение типа «System.InvalidOperationException» произошло в System.Web.Mvc.dll, но не было обработано в коде пользователяКак получить выбранный элемент из раскрывающегося списка в режиме редактирования в asp.net mvc

Дополнительная информация: Элемент ViewData с ключом «Менеджер» имеет тип «System.String», но должен иметь тип «IEnumerable».

Все, что я пытаюсь сделать, это получить выбранный элемент списка из выпадающего списка. Я хочу, чтобы он заполнялся так же, как и при создании accept, выбранный элемент, который я выбрал в Create, появился в Edit. Вот мой код:

Модель:

namespace NewHireApp1.Models 
{ 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 
using System.ComponentModel; 

public partial class NewHire 
{ 
    public int ID { get; set; } 
    [DisplayName("Manager Email")] 
    public string Manager { get; set; } 
    public string Managers_Email { get; set; } 
    public string HR_Emp { get; set; } 
    public string Emp_FirstName { get; set; } 
    public string Emp_LastName { get; set; } 
    public Nullable<System.DateTime> Emp_StartDate { get; set; } 
    public string Emp_OfficeLocation { get; set; } 
    public string Emp_Department { get; set; } 
    public string Emp_Title { get; set; } 

    public SelectList ADList { get; set; } 
} 
} 

Контроллер:

[HttpGet] 
    public ActionResult NewHire(NewHire objadmodel) 
    { 
     /*Getting data from database*/ 
     List<ActiveDirectory> objadlist = (from data in objentity.ActiveDirectories select data).ToList(); 
     objadmodel.ADList = objadlist.Select(m => new SelectListItem { Value = m.mail, Text = m.mail }); 
     return View(objadmodel); 
    } 

    public ActionResult NewHireEdit(int? id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     NewHire newhire = _entities.NewHires.Find(id); 
     List<ActiveDirectory> objadlist = (from data in objentity.ActiveDirectories select data).ToList(); 
     newhire.ADList = objadlist.Select(m => new SelectListItem { Value = m.mail, Text = m.mail }); 
     ViewBag.ADList = objadlist.Select(m => new SelectListItem { Value = m.mail, Text = m.mail }); 
     if (newhire == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(newhire); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult NewHireEdit(NewHire newhire, int? id) 
    { 


     if (ModelState.IsValid) 
     { 
      _entities.Entry(newhire).State = EntityState.Modified; 
      _entities.SaveChanges(); 
      return RedirectToAction("NewHireDetails", this.RouteData.Values); 
     } 
     return View(newhire); 
    } 

Вид:

<div class="form-group"> 
     @Html.LabelFor(model => model.Manager, "Hiring Manager Email:", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(m => m.Manager, Model.ADList, String.Empty, htmlAttributes: new { @id = "ddlAD", @style = "width:500px;", @class = "form-control" }) 
      @Html.ValidationMessageFor(model => model.Manager, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

Что я могу возможно делать неправильно, что я не могу получить выбранный элемент ? Я новичок в MVC, так что это заставляет меня заблуждаться, что я не могу понять это для жизни меня. Заранее благодарим за любые отзывы.

ответ

1

Не создайте объект SelectList самостоятельно. Если вы это сделаете, вы несете ответственность за выбор правильных позиций. Вместо этого, просто использовать IEnumerable<SelectListItem>:

public IEnumerable<SelectListItem> ADList { get; set; } 

Затем в своем действии:

objadmodel.ADList = objadlist.Select(m => new SelectListItem { Value = m.mail, Text = m.mail }); 

Кроме того, вам нужно заполнить это свойство вашего редактирования действий, а также. И действительно, вы не должны хранить это свойство на своей сущности вообще. Либо использовать модель представления или поместить выбор элементов списка в ViewBag:

ViewBag.ADList = objadlist.Select(m => new SelectListItem { Value = m.mail, Text = m.mail }); 

Тогда:

@Html.DropDownListFor(m => m.Manager, (IEnumerable<SelectListItem>)ViewBag.ADList) 

Посмотреть модели подход лучше, хотя. В общем, вам следует избегать использования ViewBag, если это вообще возможно, однако этот узкий экземпляр является одним из немногих приемлемых вариантов использования.

+0

Я все еще получаю ту же ошибку. Я только что пересмотрел свой код выше. Он все еще не работает. Я думаю, может быть, я не помещаю код в нужное место. Пожалуйста помоги. Благодарю. – sshackles

+0

Получил. Спасибо. Пересмотренный код выше с ответом. – sshackles