2011-03-03 4 views
0

데이터베이스에 내 모델 중 하나를 저장하려고합니다. 주어진 모델 : 내 컨트롤러에서페이지 모델의 DropdownListFor - Null 참조 예외

public class Foo { 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual Bar Something { get; set; } 
} 

public class Bar { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class FooPageModel { 
    public Foo F { get; set; } 
    public List<SelectListItem> Bars { get; set; } 
} 

는 내가 가진 : (강하게 FooPageModel에 입력)보기에 지금

public ActionResult Add(){ 
    var bars = ... // get all bars from db context 
    var barsList = new List<SelectListItem>(); 
    barsList.AddRange(bars.Select(b => new SelectListItem { 
      Text = b.Name, 
      Value = b.Name 
    })); 

    var model = new FooPageModel 
    { 
      Bars = barsList 
    }; 
    return View("Add", model); 
} 

:보기는 값으로, 고급 렌더링

<%: Html.DropdownListFor(f => f.F.Bar, Model.Bars) %> 

예상 할 수 있지만 페이지 양식을 제출하면 NullReferenceException이 표시됩니다 (컨트롤러에서 작업하기 전에 위에 표시된 뷰 라인에 붙여 넣기). 내 컨트롤러 코드를 다음과 같이 수정 한 것 같습니다.

var model = new FooPageModel 
{ 
    F = new Foo(), 
    Bars = barsList 
} 

그러나 이것도 실패합니다. FooPageModel을 다시 작성하여 원하는 정보의 문자열 목록으로 만들 수는 있지만 모델 논리를 복제하는 것은 불필요한 것으로 보입니다. 저는 CTP에 대해 처음 보았습니다. 아마도 그것이 어떻게 끝났을까요?

ComplexType (주소 모델)과 비슷한 코드를 작성할 수 있었고 문제가 없었습니다. 스택 추적이 도움이 될 경우 알려 주시면 게시 해 드리겠습니다. 미리 감사드립니다.

+0

가 해결 : 그것은 내 잘못 만 사이비을 퍼 팅에 대 한 실제 코드가 아닌 코드를 작성하십시오. 문제는 내 모델에서 두 개의 int 및 float 객체가 있다는 것입니다. 이는 Null 허용 가능 유형으로 데이터베이스에 작성됩니다. int를 사용하도록 모델을 변경 했습니까? 떠 다니고? 모든 것이 괜찮은 것 같습니다. – Jon

답변

0

당신은 당신이 ActionResult를 반환 코드를 표시되지 않는,하지만 당신은이 같은 뷰에 모델을 통과하고 있는지 확인해야합니다

public ActionResult Add() { 
    ... 

    return View(model); // send the model to the view 
} 
+0

죄송합니다. 컨트롤러에 모델을 반환하는 것을 포함하지 않았습니다 (방금 보여주기 위해 편집했습니다). 하지만 분명히 그게 문제가 아니에요, 난 단지 양식 게시 및 페이지로드에 null 예외를 얻을. – Jon

관련 문제