2012-03-20 7 views
0

私は作成ビューでドロップダウンリストを作成する必要があるアプリケーションをhibernateで作成しています。MVC nhibernateのドロップダウンリストを作成する

ドロップダウンリスト項目は、getHobbytype()という関数を介して取得され、選択した値を別のデータベースに格納する必要があります。

私は私のコントローラでこれを書いた:

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

そして、これは私の中でビューを作成します。これにより

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

を私はドロップダウンリストを作成することができるよ、それは私にこれを与えています

'Hobby_Types'というキーを持つ 'IEnumerable'タイプのViewDataアイテムはありません。ここで

私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; 
    } 

は私が間違っているつもりだところを教えてください。

+0

ViewData ["Hobby_Type"] – Iridio

+0

私は質問を更新しました – user1274646

+0

あなたは 'GetHobbyType'メソッドも投稿できますか? – Rippo

答えて

1

これはタイプミスです: -

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

それは

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

すべきではない。また、あなたのエラーがViewDataを内'IEnumerable' that has the key 'Hobby_Types'.

キーは大文字と小文字を区別(ではないと言及していると言いますエラーは最後にSが付きます)

ViewDataではなくViewModelを使用してください。GetHobbyTypeメソッドこのGoogle検索

編集を参照してください。この試みるので、リストを返します - 私もそれはあなたの頭痛の多くが保存されますようのviewmodelを使用して見てお勧め

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

を!

+0

yahさんのHobby_Type ...しかし、私はビューモデルを作成したくありません....それなしの方法を教えてもらえますか? – user1274646

+0

'Hobby_type'にする必要があります??? – Rippo

+0

同じことをしましたが、同じエラーが発生しました。 – user1274646

-1

これをすべて試すことができます。あなたがコントローラで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の式に責任がありますあなたが望むプロパティドロップダウンに配置する
  • 2番目はIEnumerableアイテムリストです。
  • 第3のデータ値フィールド(主キー)
  • 最後に、ドロップダウンリストに表示するデータテキストフィールドです。
関連する問題