2012-01-20 2 views
0

Razor 구문이있는 MVC 3 내부 코드 조각에 문제가 있습니다. 내 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에서 오류 메시지가 나타났습니다 3.6 버전 2 애드온 소프트웨어 릴리스

편집 : "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