2009-09-15 6 views
0

주어진 페이지에서 윈도우를 표시하기 위해 일부 JavaScript 초기화, 일부 ID가있는 일부 DIV가 필요할 수 있으며 모두 링크해야합니다. 자바 스크립트는 DIV의 ID를 알아야 할 수도 있고 DIV를 특정 방식으로 중첩해야 할 수도 있습니다. 분명히 나는이 코드를 사용하는 매 페이지마다 이것에 대해 걱정하고 싶지 않다. 그러면 오류가 발생하기 쉽고 DRY가되지 않습니다.ASP.NET MVC 그룹화/재사용 뷰 기능

WebForms를 사용하면 사용자 지정 컨트롤을 작성하여이 문제를 해결할 수 있습니다. 당신들은 어떻게 당신의 프로젝트에서 이것을하고 있습니까? 문자열을 뱉어내는 확장 메서드를 사용하고 있습니까? 아마도 사용자 정의 컨트롤입니까? 추천 방법은 무엇입니까?

감사합니다. 헤드 내용 영역에서

  1. 나는 하나 개의 콘텐츠 영역에서 일부 기능
  2. 을 설정 일부 jQuery 코드를 필요 :

    편집 : 마스터 페이지를 사용하는 경우 다음

    은 예입니다 내가 창문의 일부를 표시하는 데 필요한 일부 HTML을 넣어 것입니다

  3. 다른 콘텐츠 영역에서 나는 창에 표시되는 실제 HTML을 넣을 것입니다.

이 3 가지 코드는 모두 3 개의 다른 코드 블록을 필요로하지만 논리적으로 링크됩니다.

EDIT 2

(마스터 페이지 사용) 코드 예

<asp:Content ContentPlaceHolderID="HeaderContent" runat="server"> 
    <script type="text/javascript"> 
    $(document).ready(function() { DoSomething('div1', 'div2'); }); 
    </script> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="TopContent" runat="server"> 
    <div id='div1'> ... </div> 
</asp:Content> 

<asp:Content ContentPlaceHolderID="BottomContent" runat="server"> 
    <div id='div2'> ... </div> 
</asp:Content> 

div1과 DIV2는 자바 스크립트 함수 호출에 결합된다. 내가 실수를하면 DIV에게 다른 ID를 주면 코드가 깨질 것입니다. 이것은 요점을 입증하는 간단한 예입니다. 커플 링이 예를 들어 div1과 같은 특정 구조를 사용하는 경우 훨씬 더 복잡해집니다.

+0

편집을 롤백했습니다. 미안하지만 원래의 질문은 완전히 바뀌 었습니다. 아마 내가 제대로 설명하지 않았을거야. – pbz

답변

2

이 목적으로 Site.Master를 활용할 수 있습니까? 아니면 자신이 만든 다른 마스터를 활용할 수 있습니까? 그러면 모든 견해가이 마스터를 참조하고 초기화 된 JavaScript 및 레이아웃 요소의 이점을 얻을 수 있습니다.

나에게 이것은 콘텐츠가 본질적으로 정적 인 경우 의미가 있습니다. 그렇지 않다면 맞춤 Html.Init 도우미 메서드를 사용합니다.

나는 다음과 같은 일을 상상 해요 :

global.js

function doSomething() 
{ 
} 

//more code here 

마스터 페이지

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<!DOCTYPE html PUBLIC 
"-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="TitleContent" runat="server" /> 
    </title> 
    <link rel="Stylesheet" href="~/Content/styles.css" /> 
    <script type="text/javascript" src="global.js"></script> 
</head> 
<body> 
    <div id="customContent"> 
    </div> 
    <div id="content"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 
    </div>  
</body> 
</html> 
+0

비트와 조각이 분리되어 있기 때문에 마스터 페이지를 사용하고 있습니다. JS 코드는 헤더 섹션에 들어가고 html 부분은 일부 장소 소유자가됩니다. – pbz

+0

@pgz :이 답변에 샘플을 추가했습니다. 당신은이 방향으로 갈 필요가 없지만 그렇게하면 상당히 간단합니다. 마스터 파일의 맨 위에있는 script 태그에 포함 된 global.js 파일을 확인하십시오. –

+0

그렇습니다.하지만 doSomething 메소드는 페이지와 관련된 매개 변수 (예 : 일부 DIV의 ID)를 받아 들여야합니다. doSomething ('div1', 'div2')을 호출하고 실수로 다른 ID를 div에 할당하면 코드가 손상됩니다. 내가 찾고있는 것은 이러한 유형의 실수를 방지하는 방법입니다. 감사. – pbz

1

당신이 CustomControlls 얻을 수있는 가장 가까운 파셜 있습니다. 이벤트 핸들링이 없기 때문에 CustomControlls만큼 강력한 것은 아니지만 공통 html을 구분하는 좋은 방법입니다.

+0

partials의 문제점은 부분 위치/사용자 컨트롤에 컨텐츠 위치 보유자가 없기 때문에 중간 부분을 사용자 정의하면서 일부 "HTML"헤더 및 "바닥 글"을 작성하는 부분을 빌드 할 수 없다는 것입니다. HTML 확장 프로그램에도 동일한 문제가 있습니다. 머리글을 렌더링하는 방법과 바닥 글을 렌더링하는 방법 중 하나를 사용하려면 두 가지 부분 또는 두 가지 확장 방법이 필요합니다. 감사. – pbz

관련 문제