2012-01-20 16 views
0

MVC 3のRazor構文でコードスニペットに問題があります。私のDBテーブル(MySQL)では、私は列(FK)LanguageID [int]を持っています。その後、そのビューでは、私はその場で生成する言語のリストをDropDownListコントロールにその列に割り当てる:MVC 3 DropDownListForと間違った値のエラー

 List<SelectListItem> list = new List<SelectListItem>(); 

    list.Add(new SelectListItem 
        { 
         Value = tableRow.ID.ToString() 
         , 
         Text = "language" 
        } 

次に、ビューで、私は言語プロパティにそのリストを接続します。

@Html.DropDownListFor(
       model => model.Language, 
       new SelectList(ViewData["LanguageList"] as List<SelectListItem>, 
       "Value", "Text") 
        ) 

しかし、私は、サーバーにデータをポストするとき、それは353がDBから言語IDであるエラー結果"The value '353' is invalid."と返します。私は間違って何をしていますか?デバッグは、私はにModelState内のエラーメッセージが気づいたWhle

編集 :"The parameter conversion from type 'System.String' to type 'FavorytaWeb.Models.BookLanguage' failed because no type converter can convert between these types."

+0

それは(フォームコントローラ/アクション)と呼ばれるコードを投稿することが非常に参考になる –

答えて

5

は交換してください:

@Html.DropDownListFor(
    model => model.Language, 
    ... 
) 

で:

@Html.DropDownListFor(
    model => model.Language.LanguageID, 
    ... 
) 

あなたがに値353をバインドすることはできません複素数型はmodel.Languageを表します。それは意味をなさない。スカラープロパティにのみバインドできます。

+0

は明らかにそれが働いていたが、私は思ったんだけど、その場合には、コンパイラは、「バリュー」で言語ID「を接続していますか」? – Tony

+2

@トニー、コンパイラは何も接続しません。コンパイラが行うことは、C#コードをMSILにコンパイルすることです。次にコードを実行します。あなたのコードは、ASP.NET MVCアプリケーションになります。したがって、ビューモデルを引数として取るコントローラアクションにいくつかのデータをポストしているビューがあります。そのため、デフォルトのモデルバインダーが起動し、要求値をこのモデルにバインドしようとします。 –

+0

がそれを手に入れました。ありがとう、私はあなたにビールを借りている – Tony

関連する問題