runat="server"
필수 속성 일 때 server
ASP.NET에 대한 제한된 지식으로 사용할 수있는 유일한 옵션 인 모든 ASP.NET 컨트롤에 지정해야하는 이유는 무엇 입니까?이를 사용하지 않으면 오류가 발생합니까?
HTML 태그에서 선택적으로 사용할 수 있다는 것을 이해하고 있으며 클라이언트 / 서버 패러다임과 실제로 지정하는 것을 이해합니다.
컨트롤이 ASP.NET 컨트롤 인 경우에만 암시 될 수있는 중복 태그입니까, 아니면 근본적인 이유가 있습니까?
답변
나는 항상 ASP.NET 태그와 HTML 태그를 혼합 할 수 있다는 것을 이해하기 위해 더 많은 것이 있다고 믿었습니다 .HTML 태그에는 옵션 여부가 있습니다 runat="server"
. 태그를 그대로두면 아무 문제가 없으며 컴파일러 오류가 발생합니다. 웹 언어에 대해 암시하는 것이 많을수록 신진 프로그래머가 들어 와서 배우기가 쉽지 않습니다. 태그 속성에 대해 자세하게 설명하는 것이 좋습니다.
이 대화는 자신과 Microsoft National Services의 Talbot Crowell 사이 의 Mike Schinkel의 블로그에서 이루어졌습니다. 관련 정보는 다음과 같습니다 (소스의 문법 오류로 인해 첫 번째 단락이 해석 됨).
[…] 그러나 중요성은
<runat="server">
일관성과 확장성에 대한 것입니다.개발자가
<asp: />
ASP.NET 엔진이 무시하도록 일부 태그 (viz. ) 를 표시해야하는 경우 태그간에 네임 스페이스 충돌 및 향후 개선 사항이 발생할 수 있습니다.<runat="server">
속성 을 요구함으로써 이것은 무시된다.
계속됩니다 :
<runat=client>
모든 클라이언트 측 태그에 필요한 경우 구문 분석기는 모든 태그를 구문 분석하고<runat=client>
파트를 제거해야합니다 .
그는 계속한다:
현재 내 추측이 맞다면 파서는
runat=server
속성 또는 ”<%
“접두사 또는 ssi ”<!– #include
… (…) 가있는 태그가 아닌 한 모든 텍스트 (태그 또는 태그 없음)를 무시합니다
.
또한 ASP.NET은 설계되었으므로 웹 디자이너 (foo.aspx)와 웹 개발자 (foo.aspx.vb)를 분리 할 수 있도록 웹 디자이너는 자체 웹 디자이너 도구를 사용하여 ASP.NET에 대해 몰라도 HTML 및 클라이언트 쪽 JavaScript를 배치 할 수 있습니다. 특정 태그 또는 속성
답변
나는 보통 추측하는 것을 좋아하지 않지만, 나는 이것에 대해 갈 것입니다 …
마이크로 소프트의 .NET 마케팅이 당일 (2001 년)에 다시 등장한 것을 기억한다면, .NET이 무엇인지 말하기 어려웠습니다. 서버입니까? 프로그래밍 플랫폼? 언어? 완전히 새로운 것? 광고가 주어지면 원하는대로 모호하게 나타납니다. 문제가 해결되었습니다.
따라서 제 생각에는 ASP.NET 코드가 .NET 런타임에 연결된 Internet Explorer의 사본에서 서버 측 또는 클라이언트 측 어디에서나 실행될 수 있다는 숨겨진 비전이 있다고 생각합니다. runat = “server”는 단지 흔적 일 뿐이며, 클라이언트 측에서는 절대로 생산에 사용되지 않기 때문에 남겨져 있습니다.
그 이상한 광고를 기억하십니까?
관련 : .NET 기록 이있는 Register의 기사 .
답변
페이지에 포함될 수있는 모든 컨트롤이 서버에서 실행 되어야 하는 것은 아닙니다 . 예를 들면 다음과 같습니다.
<INPUT type="submit" runat=server />
이것은 본질적으로 다음과 같습니다.
<asp:Button runat=server />
첫 번째 태그에서 runat = server 태그를 제거하면 브라우저에서 실행되는 표준 HTML 단추가 있습니다. 서버에서 특정 컨트롤을 실행하는 이유와 반대 이유가 있으며 ASP.NET이 포함하는 HTML 태그를 기반으로 원하는 것을 “가정”할 수있는 방법이 없습니다. <asp:XXX />
컨트롤 제품군에 대해 runat = server를 “추론”하는 것이 가능할 수도 있지만 Microsoft는 마크 업 구문과 ASP.NET 엔진에 대한 해킹을 고려할 것입니다.
답변
Microsoft Msdn 기사 The Forgotten Controls : HTML Server Controls 는 runat = “server”를 텍스트 상자 <input type="text">
에 대한 예제와 함께 사용하여 설명 합니다.<input type="text" id="Textbox1" runat="server">
이렇게하면 웹 페이지가 작성되어 클라이언트로 전송되기 전에 서버의 HTML 요소에 프로그래밍 방식으로 액세스 할 수 있습니다. HTML 요소는 id 속성을 포함해야합니다. 이 속성은 요소의 ID로 사용되며 특정 ID로 요소에 프로그래밍 할 수 있습니다. 이 속성 외에도 HTML 요소는 runat = “server”를 포함해야합니다. 이는 처리 서버에게 태그가 서버에서 처리되고 기존 HTML 요소로 간주되지 않음을 알려줍니다.
즉, HTML 요소에 프로그래밍 방식으로 액세스 할 수있게하려면 추가 runat="server"
하십시오.
답변
처리 과정에서 서버 측 컨트롤을 식별하는 방법과 관련이 있다는 의혹이 있습니다. 서버 측 처리를 수행해야하는지 여부를 판별하기 위해 런타임시 모든 제어를 이름으로 확인하지 않고 태그로 내부 노드 표시를 선택합니다. 컴파일러는 유효성 검사 단계에서 서버 태그가 필요한 모든 컨트롤에 컨트롤이 있는지 확인합니다.
답변
ASP.NET 파일의 HTML 요소는 기본적으로 텍스트로 처리됩니다. 이러한 요소를 프로그래밍 가능하게하려면 runat="server"
HTML 요소에 속성을 추가하십시오 . 이 속성은 요소가 서버 제어로 처리되어야 함을 나타냅니다.
답변
ASP .NET의 모든 컨트롤은 “runat”특성이있는 System.Web.UI.Control에서 상속하기 때문입니다.
System.Web.UI.HTMLControl 클래스에서는 속성이 필요하지 않지만 System.Web.UI.WebControl 클래스에서는 속성이 필요합니다.
편집 :
좀 더 구체적으로 설명하겠습니다. asp.net은 거의 추상적 인 HTML이므로 컴파일러는 특정 태그가 서버 측에서 실행되어야한다는 것을 알기 위해 일종의 지시문이 필요합니다. 해당 속성이 없으면 먼저 서버에서 속성을 처리 할 수 없습니다. 존재하지 않으면 규칙적인 마크 업이라고 가정하여 클라이언트에 전달합니다.