2012-01-20 116 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") 
        ) 

,但是,當我的數據發佈到服務器,它與錯誤結果"The value '353' is invalid."其中353從DB語言ID返回。我究竟做錯了什麼 ?

編輯 Whle調試,我注意到了的ModelState內的錯誤信息:"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

顯然它的工作,但我想知道,在這種情況下,編譯器'連接'的LanguageID與「價值」的代碼? – Tony

+2

@Tony,編譯器沒有連接任何東西。編譯器做的是將你的C#代碼編譯成MSIL。然後你運行你的代碼。你的代碼恰好是一個ASP.NET MVC應用程序。所以你有一個視圖,它將一些數據發佈到一個控制器動作中,該控制器動作將視圖模型作爲參數。因此,默認的模型綁定器會啓動並嘗試將請求值綁定到此模型。 –

+0

明白了。謝謝,我欠你一杯啤酒 – Tony