programing

<%=%> 식이 서버 프로세서의 속성 값으로 컴파일 오류를 일으키는 이유는 무엇입니까?

muds 2023. 8. 29. 21:03
반응형

<%=%> 식이 서버 프로세서의 속성 값으로 컴파일 오류를 일으키는 이유는 무엇입니까?

이 질문은 가 다른 질문에 답하려다 발견한 결과입니다.그리고 지금 나는 그 이유가 궁금합니다.<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

반응형