Создание выпадающего списка в MVC nhibernate - PullRequest
0 голосов
/ 20 марта 2012

Я создаю приложение в спящем режиме, где мне нужно создать раскрывающийся список в моем представлении создания.

Элементы выпадающего списка выбираются с помощью функции getHobbytype(), и из этого мне нужно сохранить выбранное значение в другой базе данных.

Я написал это в моем контроллере:

ViewData["Hobby_type"] = 
       new SelectList(new  Hobby_MasterService().GetHobbyType(),"Hobby_Types");

И это в моем представлении создания:

@Html.DropDownListFor(Model => 
       Model.Hobby_Types,(IEnumerable<SelectListItem>)ViewData["Hobby_type"])

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

Нет элемента ViewData типа 'IEnumerable', который имеет ключ 'Hobby_Types'.

Вот мой метод GetHobbyType:

 public IList<String> GetHobbyType()
 {
   log.Debug("Started");
   ISession session = DataAccessLayerHelper.OpenReaderSession();
    IList<String> htype = null;
   ITransaction transaction = null;
  try
  {
    transaction = session.BeginTransaction();
    htype = session.CreateSQLQuery("SELECT Hobby_Types FROM Hobby_Type").List<String> ();
  session.Flush();
 transaction.Commit();
}
    catch (Exception ex)
 {
   if (transaction != null && transaction.IsActive)
   transaction.Rollback();
   log.Error(ex);

  }
  log.Debug("End");
  return htype;
  }

Пожалуйста, скажите мне, где я иду не так.

Ответы [ 2 ]

1 голос
/ 20 марта 2012

Это опечатка: -

@Html.DropDownListFor(Model => 
       Model.Hobby_Types,(IEnumerable<SelectListItem>)ViewData["Type"])

Разве это не должно быть

@Html.DropDownListFor(Model => 
       Model.Hobby_Types,(IEnumerable<SelectListItem>)ViewData["Hobby_type"])

Также ваша ошибка говорит 'IEnumerable' that has the key 'Hobby_Types'.

Ключ в ViewData чувствителен к регистру (не говоря уже о том, что ошибка имеет S в конце)

Я бы также рекомендовал использовать ViewModel, а не ViewData. Посмотреть это Google поиск

edit Метод GetHobbyType возвращает список, поэтому попробуйте это: -

 ViewData["Hobby_type"] =    
   new SelectList(
    new Hobby_MasterService().GetHobbyType()
     .Select(x => new SelectListItem { Text = x, Value = x }).ToList()
   ,"Hobby_Types");

Я также предлагаю посмотреть на использование модели представления, так как это избавит вас от многих головных болей!

0 голосов
/ 20 марта 2012

Вы можете попробовать все это.

Вы должны написать услугу named GetAllStudents()

public IList<Student> GetAllStudents()
{

    log.Debug("Started");
    ISession session = DataAccessLayerHelper.OpenReaderSession();
    IList<Student> students = null;
    ITransaction transaction = null;
    try
    {
        transaction = session.BeginTransaction();

        ICriteria criteria = session.CreateCriteria(typeof(Student));
        students = criteria.List<Student>();
        session.Flush();
        transaction.Commit();
    }
    catch (Exception ex)
    {
        if (transaction != null && transaction.IsActive)
            transaction.Rollback();
        log.Error(ex);

    }
    finally
    {
        if (transaction != null)
            transaction.Dispose();

        if (session != null && session.IsConnected)
            session.Close();
    }

    log.Debug("End");
    return students;
}

В контроллере:

ViewBag.std = new StudentService().GetAllStudents(); // ViewBag.std will hold all students.

В режиме создания представления:

@Html.DropDownListFor(model => model.Name, new SelectList(ViewBag.std, "Id", "Name"), "-- Select --")
  • Первый параметр отвечает за выражение Linq для свойства класса, которое вы хотите поместить в раскрывающемся списке.
  • Второй - IEnumerable список элементов.
  • Третье поле значения данных. (Первичный ключ)
  • Последнее - текстовое поле данных, которое вы хотите отобразить в выпадающем списке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...