그래서 내가 만든 MVC3 레이아웃에서 이상한 일이 발생했습니다. BaseVM에 강하게 입력됩니다. 모든 View 모델은 BaseVM에서 상속됩니다. 내가 디버깅하고 코드를 단계별로 실행하고 레이아웃을 단계별로 진행하면 BaseVM 모델이 null이 아니며 바닥 글의 저작권에 대한 현재 연도를 가져 오는 메소드를 호출합니다. 그러나 레이아웃의 맨 아래로 가면 마침내 속성을 호출하여 예외적으로 예외를 던져서 갑자기 모델이 null이됩니다. 이제는 응용 프로그램에 오류 화면이나 메시지가 표시되지 않지만이 예외는 페이지가로드 될 때마다 기록됩니다.MVC3 @ 모델이 레이아웃에서 null이 됨
public class BaseVM
{
public string CurrentYear
{
get
{
return DateTime.Today.Year.ToString();
}
}
public BaseVM()
{
}
}
public class PrelaunchReserveVM : BaseVM
{
public PrelaunchDTO Prelaunch { get; set; }
public PrelaunchReserveVM()
: this(new PrelaunchDTO()) { }
public PrelaunchReserveVM(PrelaunchDTO prelaunch)
: base()
{
this.Prelaunch = prelaunch;
}
}
컨트롤러의 동작 : 다음 코드 샘플의
public ActionResult Reserve()
{
return View("Reserve", new PrelaunchReserveVM(new PrelaunchDTO()));
}
레이아웃 :
@model StickyThink.Models.VM.BaseVM
...
<div id="container">
<div id="main" role="main" style="padding: 0px; margin: 0px;">
@RenderBody()
</div>
</div>
<footer>
<div id="FooterPageContainer" class="center">
Copyright © @Model.CurrentYear ... All rights reserved.
</div>
</footer>
<!-- END: Add your site or application content here -->
@Html.Partial("_Scripts")
@RenderSection("scripts", false);
그래서 @ Model.CurrentYear로 들어가고 model은 null이 아닙니다. 그런 다음 뷰에서 일부 스크립트를 렌더링하기 위해 @RenderSection으로 이동 한 다음 예외가 발생하고 @Model이 null입니다. 생각?
'RenderSection'의 모양은 무엇입니까? –
_Layout 내부의 어떤 모델입니까? 이것은 말이되지 않습니다. 레이아웃은 동일하지만 모델은 각 뷰에 대해 고유합니다. –
예외는 무엇입니까? –