부분보기에서 LoginInfo
개체를 보유하는 변수 LoginInfo
에 액세스해야합니다. 나는 다음을 시도했다 :부분보기 어려움 ASP.NET MVC
@LoginInfo info = @(LoginInfo)Session["LoginInfo"]
그러나 그것은 나에게 컴파일러 오류를 준다. 내가 도대체 뭘 잘못하고있는 겁니까? 내가 잘못 뭐하는 거지
부분보기에서 LoginInfo
개체를 보유하는 변수 LoginInfo
에 액세스해야합니다. 나는 다음을 시도했다 :부분보기 어려움 ASP.NET MVC
@LoginInfo info = @(LoginInfo)Session["LoginInfo"]
그러나 그것은 나에게 컴파일러 오류를 준다. 내가 도대체 뭘 잘못하고있는 겁니까? 내가 잘못 뭐하는 거지
? \
많은 것들. 당신이 잘못한 첫 번째 일은 면도기 구문입니다. 다음과 같아야합니다.
@{ LoginInfo info = (LoginInfo)Session["LoginInfo"]; }
하지만 그저 구문입니다. 당신은 훨씬 더 큰 문제가 있습니다. 디자인 문제가 있습니다. MVC 패턴을 위반하고 있습니다.
뷰는 데이터를 가져 오려고 시도하면 안됩니다. 뷰는 뷰 모델의 형태로 제어기 조치에서 전달 된 데이터를 사용합니다. 당신이 컨트롤러 액션이 다음
public class MyViewModel
{
public LoginInfo LoginInfo { get; set; }
}
:
그래서 당신은보기 모델을 정의
public ActionResult Foo()
{
var model = new MyViewModel();
model.LoginInfo = (LoginInfo)Session["LoginInfo"];
return View(model);
}
당신은 당신이보기 모델을 사용하는 강력한 형식의보기가 있습니다
을@model MyViewModel
<div>Hello @Model.LoginInfo.FirstName</div>
하지만이 경우 (클래스 이름이 LoginInfo
인 경우) 나는 u는 모든보기에 공통 위젯을 표시하려고합니다. 그러면 Html.Action helper을 사용할 수 있습니다.
그래서 당신은 (귀하의 경우 세션)이 일부 데이터 소스에서 정보를 가져옵니다 컨트롤러 액션 정의 :
[ChildActionOnly]
public ActionResult LoginInfo()
{
var model = (LoginInfo)Session["LoginInfo"] ?? new LoginInfo();
return PartialView(model);
}
을 다음 정의 부분에 대응 : 마지막으로
@model LoginInfo
<div>Hello @Model.FirstName @Model.LastName</div>
과에 귀하의 _layout에이 위젯을 어딘가에 포함시킬 수 있습니다 :
@Html.Action("LoginInfo", "SomeController")
ChildActionOn 아래에서 부분적으로 세션을 볼 수있는 방법을 설명 할 수 있습니다. – Demodave