2011-01-20 7 views
2

ASP.NET MVC2 및 C#을 사용하고 있지만이 질문은 일반적으로 ASP.NET에 적용됩니다.왜 ASP.NET에서 HTML 속성 내에 ContentPlaceholder를 사용할 수 없습니까?

<body id="<asp:ContentPlaceHolder ID="BodyID' runat="server" />"> 

인텔리이 body 태그와 id= 후 즉시 오프닝 견적을 강조하고, 불평 :

이 중단

유효성 검사 (HTML 4.01) : 요소 '몸'누락 ' > '문자를 시작 태그에서 찾습니다.

asp 요소는 무시되며 렌더링 된 HTML에서 id 특성은 비어 있습니다. (나는 VS.에서 후자의 휴식 구문 hilighting 그래도의 ASP 요소 내부를 두 번 또는 작은 따옴표를 사용하는지 여부 같은 문제) (내가 세션 변수 설정 가정)이 작동

: 왜

<body id="<%: Session["BodyID"] %>"> 

입니다 인라인 평가는 HTML 속성 내에서 지원되지만 ASP 컨트롤은 내부 속성을 렌더링하지 않습니다.

다음은 나의 유스 케이스 다. 컨트롤러에서 전달 된 데이터를 기반으로, 뷰는 어떤 유형의 데이터를 렌더링하는지 알고있다. 이 뷰는 마스터 페이지의 여러 위치에 데이터를 주입합니다. 헤드에 제목을 삽입하고 본문에 마크 업을 삽입 할 수 있지만 일부 속성에 데이터를 삽입하려고합니다. ID와 클래스 이름은 분명한 예이지만 다른 것들도 있습니다.

유효한 마크 업을 유지하면서이 작업을 수행하고 싶습니다. 전체 body 태그를 동적으로 렌더링하는 것과 같은 비법은 없습니다. Visual Studio에서 항상 유효한 HTML 또는 XML 문서와 비슷한 페이지를 원합니다.

인라인 평가 기능을 사용하는 것은 좋지만 모델이나 컨트롤러에서 수행 할 속성을 설정해야합니다. 어떤 경우에는 필요하지만 다른 것들에는 정적 인 값이 있습니다 - 저는 목적에 맞게 만들어진 뷰를 가지고 있습니다. 뷰의 정적 값을 마스터 페이지에 삽입하면됩니다. 나는 추상적 인 컨트롤러 클래스를 만드는 데 오버 헤드를 겪고 싶지 않고, 모든 컨트롤러를 상속 받아야한다. 마크 업을 주입 할 때 이미 가지고있는 것과 동일한 기능을 사용하기 만하면된다.

질문 (예, 별도의 질문을 열어야합니다.) : ASP 컨트롤 및 인라인 코드 너겟의 평가 순서는 무엇입니까? ASP가 제어하기 전에 코드 너겟이 먼저 해결되었다고 가정합니다. ASP 컨트롤 선언 안에 코드 너겟을 넣으십시오. 하지만 프로세스를 자세히 설명하는 문서를 찾을 수 없습니다. 누구든지 내게 알려줄 수 있습니까?

감사합니다.

UPDATE : 파울리는 이미 runat="server"를 표시 있어요 요소 내부 아니에요 당신이 실제로 한, 어디에서든지 당신이 좋아하는 ContentPlaceholders를 사용할 수 있음을 언급했다. 나는 다시 테스트했고, 그가 옳았다는 것을 안다 - 나는 처음에 그것을 놓쳤다. Visual Studio는 여전히 혼란스럽고 HTML 유효성 검사 경고를 제공하지만 페이지가 렌더링 될 때 예상 값이 특성에 나타납니다. 따라서 질문에 대한 대답은 "하지만 할 수 있습니다!"

+0

자리 표시자는 정확히 속성 값 – Guillaume86

+0

에 대한 잔인 함처럼 보입니다. :) –

+0

마스터 페이지로 데이터를 전송할 때 볼 수있는 다른 기술만큼 과장하지 않습니다! 예 : http://stackoverflow.com/questions/78548/passing-data-to-master-page-in-asp-net-mvc -보기에서 마스터에게 ID를 받기 위해 * 수행하려고한다고 생각합니다. ? ;-) – Val

답변

2
  1. '파서는 모든 충돌의 혼동되기 때문에, 사용자 ID 및 RUNAT의 주위에 당신이 MVC와
  2. 사용'을 웹폼 컨트롤을 사용하지 말아야합니다" 'body 태그 이후의

서버 컨트롤로 취급되지 않는 runat = "server"가 없지만 원하는 텍스트를 지울 수 있으므로 원하는 위치에 콘텐트 소유자 또는 다른 컨트롤을 배치 할 수 있습니다.

+1

ContentPlaceHolders는 MVC 내에서 완벽하게 괜찮습니다. MVC와 함께 제공되는 샘플 프로젝트에 있습니다. –

+0

나는 당신도 ... , 및 기타 등등을 사용하는 것이 완벽하게 좋지 않아야한다고 말했지만, MVC에서 내용을 렌더링 할 때 HtmlHelpers를 사용하는 것이 좋습니다. –

+0

예.하지만 HTMLHelper가 여기 도움이되지 않습니다. 데이터를 필요로하는 마스터 페이지이지만 도우미가보기에 있어야합니다. 컨텐츠를 생성하는 방법에 관계없이, 나는 마스터 페이지로 두 가지 방법 중 하나로 만 주입 할 수있다 : ContentPlaceholder, 또는 함수 나 속성을 호출하는 인라인 평가판. – Val

관련 문제