<%=%> 식이 서버 프로세서의 속성 값으로 컴파일 오류를 일으키는 이유는 무엇입니까?
이 질문은 제가 다른 질문에 답하려다 발견한 결과입니다.그리고 지금 나는 그 이유가 궁금합니다.<asp:TextBox runat="server" Visible="<%= true %>" />
컴파일 오류가 발생하고 예상했던 것처럼 TextBox가 표시되지 않습니다.
제가 지금까지 알아낸 바로는,<%= %>
표현식은 제가 항상 생각했던 것처럼 문자 그대로의 제어로 번역되지 않습니다.대신 페이지가 렌더링될 때 HtmlTextWriter에 직접 기록되고 평가됩니다.하지만 분명히 파서(ASP를 번역하는 부분에 대한 정확한 용어인지는 잘 모르겠습니다.NET 마크업을 . code는 NET 평가도 <%= %>
식을 서버 컨트롤의 속성 값으로 사용할 때 사용합니다.그것은 그냥 끈으로 사용합니다.그래서 오류 메시지가 표시되는 것 같습니다.'System' 유형의 개체를 만들 수 없습니다.'Visible' 속성에 대한 문자열 표현 '<%=true %>'의 'Boolean'입니다.
runat="server"를 하면,<%= %>
다음과 같은 일반 html-dll을 사용합니다.
<input type="button" id="Button1" visible='<%= true %>' />
그런 다음 파서는 식 앞뒤로 청크를 분할한 다음 렌더링 방법으로 HtmlTextWriter에 씁니다.이와 같은 것:
__w.Write("<input type=\"button\" id=\"Button1\" visible='");
__w.Write(true);
__w.Write("' />");
마지막으로 깨달은 건...가 시때도할가내때로 때.<%# %>
통제.을 알 수 .DataBind(), 그러면 제가 기대하는 바를 알 수 있습니다.바인딩되어 있을 때하지만, 된 코드는 표현식과 는 데바연만지식있하결이, <%=%> 합니다.<%# %>
합니다.파서는 결국 다음을 생성합니다.
[DebuggerNonUserCode]
private Button __BuildControldataboundButton()
{
Button button = new Button();
base.databoundButton = button;
button.ApplyStyleSheetSkin(this);
button.ID = "databoundButton";
button.DataBinding += new EventHandler(this.__DataBindingdataboundButton);
return button;
}
public void __DataBindingdataboundButton(object sender, EventArgs e)
{
Button button = (Button) sender;
Page bindingContainer = (Page) button.BindingContainer;
button.Visible = true;
}
시작:
<asp:Button ID="databoundButton" Visible='<%# true %>' runat="server" />
에 하십시오.button.Visible = true;
은 의 결과입니다.<%# %>
표현.
그래서 제 질문은..첫 번째 예제의 식을 "true"로 평가하는 대신 문자열로 처리하는 이유는 무엇입니까?표현식은 다른 두 예와 다소 비슷하며, 제가 예상했던 코드를 산출합니다.
단순한 실수일까요(현재 버전의 ASP에 대한 새로운 문제가 아니기 때문에 의심스럽습니다). NET을 할 수 없는 ?<%= %>
그렇게?
다음 항목:
<asp:Button runat="server" id="Button1" visible='<%= true %>' />
평가 대상이 아닙니다.
<asp:Button runat="server" id="Button1" visible='true' />
<%=%>는 응답 스트림에 직접 출력되며, asp 마크업은 응답 스트림의 일부가 아닙니다.<%=%> 연산자가 asp 마크업에서 어떤 종류의 전처리를 수행하고 있다고 가정하는 것은 실수입니다.
별도로 ASP에 대해 생각하는 것이 도움이 됩니다.<%# %> 및 <%= %> 운영자와 관련된 NET 라이프사이클.
<%# %>는 개체에 값을 할당하는 것과 더 유사한 의미를 가집니다.ASP에서.NET 라이프사이클, <%# %> 연산자는 페이지가 응답 버퍼에 첫 번째 바이트를 쓰기 전에 평가됩니다.
<%=%>는 응답과 같은 의미입니다.Write. 모든 데이터 바인딩 및 폼 처리를 먼저 수행하고 ASP 맨 끝에 있는 응답 버퍼에 HTML을 출력해야 합니다.NET 라이프사이클.
언급URL : https://stackoverflow.com/questions/370201/why-will-expressions-as-property-values-on-a-server-controls-lead-to-a-co
'programing' 카테고리의 다른 글
ADB 설치가 실패하고 INSTALL_FAILED_가 발생함테스트_전용 (0) | 2023.08.29 |
---|---|
CSS @font-face는 Firefox와 함께 작동하지 않지만 Chrome 및 IE와 함께 작동합니다. (0) | 2023.08.29 |
저장 프로시저가 있는지 확인하는 방법은 무엇입니까? (0) | 2023.08.29 |
'System'의 형식 이니셜라이저입니다.데이터. 엔티티.내부의.AppConfig'에서 예외를 발생시켰습니다. (0) | 2023.08.29 |
reduct()를 사용하는 유용한 코드는? (0) | 2023.08.29 |