컨트롤에 코드 블록 (예 : <%… %>)이 포함되어 있으므로 컨트롤 컬렉션을 수정할 수 없습니다.
C #에서 동적 메타 태그를 만들려고하는데 다음과 같은 오류가 발생합니다.
컨트롤에 코드 블록 (예 : <% ... %>)이 포함되어 있기 때문에 Controls 컬렉션을 수정할 수 없습니다.
이것은 내가 추가 한 코드입니다.
HtmlMeta meta = new HtmlMeta();
meta.Name = "keywords";
meta.Content = "book,paper";
Page.Header.Controls.Add(meta);
대단히 감사합니다.
세부 정보를 많이 포함하지 않았기 때문에 확실하게 말하기는 어렵지만, <% ... %>
내부에 코드 블록 이 있다는 것입니다 Page.Header
( <head runat="server">
마스터 페이지에서 참조). 따라서 해당 컨트롤의 Controls 컬렉션에 항목을 추가하려고하면이 질문의 제목에 오류 메시지가 표시됩니다.
내가 맞다면 해결 방법은 코드 블록 <asp:placeholder runat="server">
주위 에 태그 를 감싸는 것 <% ... %>
입니다. 이렇게하면 코드 블록이 컨트롤의 직접적인 자식이 아닌 Placeholder 컨트롤의 자식이 Page.Header
되지만 렌더링 된 출력은 전혀 변경되지 않습니다. 이제 코드 블록이 직접 자식이 아니므로 Page.Header
헤더의 컨트롤 컬렉션에 오류없이 항목을 추가 할 수 있습니다.
다시 말하지만 어딘가에 코드 블록이 있거나이 오류가 표시되지 않습니다. aspx 페이지에 없으면 aspx MasterPageFile
맨 위에 있는 속성이 참조하는 파일을 가장 먼저 볼 것입니다 .
Telerik 구성 요소를 사용하고 있고 자바 스크립트에 <% = .... %>가있는 참조가있는 경우를 대비하여 스크립트 태그를 RadScriptBlock으로 래핑하십시오.
<telerik:RadScriptBlock ID="radSript1" runat="server">
<script type="text/javascript">
//Your javascript
</script>
</telerik>
감사합니다 Örvar
"컨트롤에 코드 블록이 포함되어 있기 때문에 컨트롤 컬렉션을 수정할 수 없습니다" 에서 솔루션을 확인하십시오.
다른 문제에 허용 솔루션 변경 인스턴스의 - 나를 위해 일 <%=
에 <%#
에서 코드 블록을 변환, Response.Write
동일한 제한에 의해 제한되지 않은 평가 블록에.
하지만이 경우 여기에 허용 된 솔루션이 제안 하는 것처럼 마스터 페이지 ContentPlaceHolder 요소가 아닌 다른 요소, 즉 asp:Placeholder
제안 된 컨트롤에 컨트롤을 추가해야합니다 .
이 방법으로 해결 한 동일한 문제가 있습니다.
다음과 같이 동일한 오류를 일으킨 현재 페이지 헤더에 메타를 추가하는 대신 :
Page.Header.Controls.Add(meta);
대신 이것을 사용했습니다.
Master.FindControl("YourHeadContentPlaceHolder").Controls.Add(meta);
그리고 그것은 매력처럼 작동합니다.
질문을 실제로 해결하지는 않지만 중요한 대안입니다.
페이지 시작 부분 ( <body>
요소 내부 ) 에 사용자 정의 html을 추가 하려면 Page.ClientScript.RegisterClientScriptBlock()
.
이 메서드는 "스크립트"라고하지만 html을 포함하여 임의의 문자열을 추가 할 수 있습니다.
Ovar에서 언급 한 Telerik을 사용하는 경우 자바 스크립트를
<telerik:RadScriptBlock ID="radSript1" runat="server">
<script type="text/javascript">
//Your javascript
</script>
</telerik>
Telerik은 요소를 찾을 때 <% # %>를 인식하지 못하므로 자바 스크립트 코드가 래핑되지 않은 경우 <% = %>에서 오류가 발생합니다.
ContentPlaceholder 안에 자리 표시 자 컨트롤을 넣습니다.
<asp:Content ID="header" ContentPlaceHolderID="head" runat="server">
<asp:PlaceHolder ID="metatags" runat="server">
</asp:PlaceHolder>
</asp:Content>
비하인드 코드 :
HtmlMeta hm1 = new HtmlMeta();
hm1.Name = "Description";
hm1.Content = "Content here";
metatags.Controls.Add(hm1);
'Programing' 카테고리의 다른 글
Java에서 double을 float로 변환 (0) | 2021.01.05 |
---|---|
현재 UITableViewController 위에 UIView를 추가하는 방법 (0) | 2021.01.05 |
node.js 표준 모듈의 전역 변수? (0) | 2021.01.05 |
Windows 상자에서 Python PIP를 업데이트하는 방법에 대한 아이디어가 있습니까? (0) | 2021.01.05 |
LINQ + Foreach 대 Foreach + If (0) | 2021.01.05 |