아주 단순한 개념 인 것처럼 보이는 데 어려움을 겪고 있습니다. 내 _Layout.cshtml에 의해 사용하기위한 ViewBag의 값이 있다면, 그 값을 어떻게 그리고 어디에서 설정해야합니까? 나는 현재를 참조로 여기 ASP.NET MVC 3보기에서 공통 데이터를 처리하기위한 접근 방식
옵션 (나에게) 가장 명백하다 :- 각 컨트롤러 (DRY되지 않음)
- 는 컨트롤러에서 상속 내 자신의 컨트롤러 기반을 만들고 설정의 값을 설정 Global.asax.cs에 값을 설정 기본 클래스
- 가치
- 데이터를 설정하고 전역 필터를 등록하기 ActionFilter 생성 (더러운 느낌)
- 의 값을 설정 (도 잘못 느낌) 각 컨트롤러는 사용자 이름 값을 설정하면 그것은 정말 아니다,
_Layout.cshtml
<!DOCTYPE html> <html> <head runat="server"> <title>@ViewBag.Title</title> </head> <body> <div id="header"> <h1>Welcome @ViewBag.UserName</h2> </div> <div id="content"> @RenderBody() </div> </body> </html>
: _ViewStart.cshtml 예를 들어
(매우 잘못하고 아주 더러운 느낌) 마른. CodeIgniter와 같은 작업으로이 문제를 해결했다면이 공통 항목을 처리하고 기쁜 방법으로 나만의 기본 컨트롤러를 만들 수있었습니다. ASP.NET MVC 3에서 더 선호되는 옵션이 있습니까?
실제로이 특정 시나리오에서 "UserName"을 추측하는 것은 실제로 세션/양식 인증 티켓에서 오는 것입니다. 따라서 FormsAuth 코드를 사용하는 HTML 도우미를 사용하여 쿠키에서 Username을 가져 와서 MvcHtmlString을 렌더링하는 것이 좋습니다. – RPM1984
흠 ... 좋은 지적입니다. 아마도 @ ViewBag.UserName이 가장 좋은 예가 아닙니다. 그래도 나는 지금 더 큰 그림에 더 관심이있다. – Greg
@ RPM1984 :보기에 "사용자 이름"이 양식 승인에서 온 것이 중요하지 않습니다. 전달되어야합니다 (ViewBag 또는 기타). 뷰는 결코 "가져 오기"해서는 안됩니다. 테스트 시나리오를 고려해보십시오. 가짜 데이터를 유닛 테스트 뷰로 전달하려고합니다. 뷰가 "페치"하는 경우 가능하지 않습니다. 또한 MVC 패턴의 전체적인 점을 거의 무효화합니다. 당신을 선택하지는 않지만 방금 MVC 기사 (기본 MVC 프로젝트 템플릿 포함)에서 이러한 유형의 사고가 반복되는 것을 보았습니다. – Roger