2011-01-10 8 views
2

다른 언어 (PHP/Python)에서는 주어진 HTML 페이지 레이아웃을 나타내는 클래스를 만드는 데 익숙합니다. 이러한 클래스는 탐색 (다중 레벨), 오류 메시지, 정보 메시지, 바닥 글 텍스트 등과 같은 속성 및 동적 기능을 무제한으로 가질 수 있습니다. 이러한 항목의 대부분은 기본값을 가지지 만 페이지 당 오버라이드 될 수 있습니다 수평. 예를 들면 :ASP.Net MVC 3 면도기 : 동적 레이아웃에 정보를 생성하고 전달하는 방법

Layout = MainPage() 

Layout.Title = "Google Image Search" 

Layout.Nav1.Add("Google", "http://www.google.com", Selected=True) 
Layout.Nav1.Add("Yahoo", "http://www.yahoo.com") 
Layout.Nav1.Add("Bing", "http://www.bing.com") 

Layout.Nav2.Add("Google Image Search", "http://......", Selected=True) 
Layout.Nav2.Add("Google Shopping Search", "http://......") 
Layout.Nav2.Add("Google Video Search", "http://......") 
Layout.Nav2.Add("Google Web Search", "http://......") 

하거나, 처리 오류 :

try: 
    # do something 
except ValidationError as e: 
    Layout.Error.Add(e) 

또는 PHP 예 :

$Layout->Info[] = "Your changes have been saved!"; 

내 질문은 : 내가 ASP.Net MVC에 유사한 기능을 구현 어떻게 3 면도기 (VB)?

지금까지 ViewData을 사용하여 다양한 데이터 비트를보기에 전달하는 방법을 알 수있었습니다. 또한 강력한 형식의 뷰를 사용하여 작업했습니다.

솔직히 말해서이 논리, 컨트롤러 또는보기 (또는 어딘가에 있어야하는 모델)를 가지고있는 사람이 누구인지 확실하지 않습니다.

  1. 레이아웃의 기본 값을 초기화하는 하나의 장소 (탐색의 첫 번째 레이어처럼이, 등등 ...)
  2. 는 강력한 형식 : 여기

    는 내가 무엇을 위해 촬영하고 요약 한 것입니다 같은 Public Readonly Property Nav1 as List(of NavElement)
  3. 그리고이 레이아웃 요소를 렌더링 할 수있는 단일 장소로 속성,

가 여기에 앤이 이런 용서해주세요 (나는 _Layout.vbhtml 가정) 게시 ... 나는 새로운 (면도기)과 나에게 새로운 플랫폼 (ASP.Net MVC)에서 "올바른 방법"을 찾아 내려고 노력 중입니다.

일반적으로 대단히 환영합니다!

답변

1

나는 보통 컨트롤러 속성 (MainMenu)을 사용하여 ViewData 사전에 Controller.OnResultExecuting의 BaseController에 추가합니다. mvc3에 ViewBag이라는 이름이 붙어 있으며 동적 객체입니다.

또 다른 접근법은 면도기에 섹션을 사용하는 것입니다. 이 질문을보십시오 : ContentPlaceHolder in Razor?

+0

확인 및 확인해 주셔서 감사합니다. – gahooa

1

나는 원근감이 fat models, skinny controllers입니다. 그것이 나 였다면 귀하의 공통 데이터에 대한 지원을 제공하는 귀하의 페이지 모델을위한 기본 클래스를 생성 할 것입니다. 그런 다음 개별 페이지 모델에 대한 상속을 상주시키고 페이지에 특정 데이터를 저장할 수 있습니다.

나를 위해 잘 작동하는 MVC 구현에는 일반적으로 비교적 깨끗한 컨트롤러가 있습니다. 컨트롤러는 요청에서 모델로 데이터를 가져온 다음 준비된 모델을 올바른보기로 전달하는 커넥터입니다.

.Net의 컬렉션을 저장하는 방법은 IEnumerable interface을 구현하는 클래스를 살펴보십시오. 특히 DictionaryList 클래스에 중점을 둡니다. 사전 개체는 이름/값 쌍을 저장하며 중첩 된 사전을 포함 할 수 있습니다.PHP로 다차원 배열을 사용할 수있는 것과 거의 똑같이 작업 할 수 있습니다. List 객체는 동일한 유형의 항목에 대한 색인 된 컬렉션입니다. PHP에서 간단한 배열처럼 작업 할 수 있습니다.

한 쪽 메모 - .Net을 시작하고 PHP/Python 배경에서 시작하는 경우 C#으로 전환 할 수 있다면 더 좋을 수도 있습니다. 구문이 훨씬 편안하고 자습서/예제가 더 풍부합니다 (특히 asp.net mvc 세계에서)

0

어렵지 않습니다! :-) 레이아웃 모델의 콘텐츠 페이지 유형이 동일한 경우 연결은 자동입니다. 여기에 간단한 예입니다 ...

테스트 레이아웃입니다 :

@model string 
<style> 
.test 
    { 
     background:@Model; 
    } 
</style> 
<div class="test"> 
    Ciao 
</div> 
@RenderBody() 

그리고 이것은

@{ 
    Layout = "~/Views/Shared/_Test.cshtml"; 
} 
@model string 
...blah blah... 

그냥 같은과 함께보기를 호출 테스트 콘텐츠 페이지입니다 :

... 
return View("Name", (object)"Green"); 

그리고 끝났습니다! 모델은 콘텐츠 페이지와 레이아웃 페이지에서 동일합니다. Andrea

피씨 : 믿어주세요! 이것은 유용합니다 !!! 어쩌면 순수 주의자에게 최선이 아니지만, 정말 유용합니다! :-)

관련 문제