2014-10-31 3 views
0

MVC 프레임 워크를 사용하면 간단한 문제가 발생합니다.MVC 모델이 null입니다.

@model mvc_test.Models.HomeModel 

@{ 
    ViewBag.Title = "Index"; 
} 

<li>@Model.OutputEmail</li>//Error NullReferenceException 

@Html.LabelFor(x => x.OutputEmail, new { @class = "Label"}) 
@Html.TextBoxFor(x => x.OutputEmail) 
@Html.ValidationMessageFor(x => x.OutputEmail) 

그래서 제 생각에는 Linq Expression (x => ...)이 항상 클래스의 새 인스턴스를 만듭니다. 그래서 나는 모델 물마루를 볼 필요가 있거나 더 나은 해결책이있다. 이후 linq expresions 통해 모델에 액세스 할 수 있습니다.

+0

컨트롤러 코드는 어디에 있습니까? –

+1

코드의 주석에 따르면, "Linq 표현식"이전에 * 오류가 발생하고 있습니다. 그렇다면이 코드는 전혀 관련이 없다고 생각합니까? * 모델의 인스턴스를 뷰에 제공하고 있습니까? – David

+2

보기에서 모델을 반환하고 있습니까? 나는 그것이 문제라고 생각한다. 또한 LINQ가 무엇인지에 대한 오해가 있다고 생각합니다. – Jonesopolis

답변

3

이 코드 :

@Model.OutputEmail 

뷰에 전달되는 모델의 인스턴스를 참조합니다. 그러나 코드 :

@Html.LabelFor(x => x.OutputEmail) 

하지 참조 모델의 실제 인스턴스를한다. 모델의 유형에 반영되고 해당 유형을위한 마크 업이 생성됩니다.

그래서 당신이보기에 모델을 통과하지 않는 경우 모델의 예를null 때문에 다음 첫 번째 줄에 실패합니다,하지만 모델의 유형이 아직 알려져 있기 때문에 두 번째는 성공합니다.

+0

따라서 LabelFor 메서드는 인스턴스를 만듭니다. 누군가 그것을 할 필요가 없습니까? 나는 아무것도 얻을 수 없다. –

+0

@ MR.ABC : 아니요, 'LabelFor'는 모델 인스턴스를 생성하지 않습니다. HTML 마크 업을 생성합니다. 요점은'LabelFor'를 사용하기 위해 모델 인스턴스를 제공 할 필요가 없다는 것입니다. 그러나 모델의 인스턴스 속성 값을 참조하기 위해 모델의 인스턴스를 제공해야합니다. LabelFor 또는 이와 유사한 HTML 도우미 메서드와 아무 관련이 없습니다. – David

+0

LabelFor가 HTML 마크 업을 생성한다는 것을 알고 있습니다. MVC의 어느 곳에서나 모델의 인스턴스를 만들어 데이터를 가져와야합니다. –

1

귀하의 모델은 null입니다. @Html.DisplayFor(x => x.OutputEmail)을 사용할 수도 있고 null을 확인한 다음 null 인 경우 값을 출력하지 않을 수도 있습니다. 또는 컨트롤러에서 모델에 대한 객체를 만들 수도 있습니다.

관련 문제