"컨트롤에 코드 블록이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다"
슬라이더 인 간단한 사용자 정의 컨트롤을 만들려고합니다. AjaxToolkit SliderExtender를 사용자 정의 컨트롤에 추가하면 (* & $ # () @ # 오류가 발생합니다.
'/'응용 프로그램에 서버 오류가 있습니다. 컨트롤에 코드 블록 (예 :``)이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 발생한 위치에 대한 자세한 정보는 스택 추적을 검토하십시오. 예외 정보 : System.Web.HttpException : 컨트롤에 코드 블록 (예 :``)이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다. 소스 오류 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 생성되었습니다. 예외의 출처와 위치에 관한 정보는 아래 예외 스택 추적을 사용하여 식별 할 수 있습니다. 스택 추적 : [HttpException (0x80004005) : 컨트롤에 코드 블록 (예 :``)이 포함되어 있으므로 Controls 컬렉션을 수정할 수 없습니다.] System.Web.UI.ControlCollection.Add (Control child) +8677431 AjaxControlToolkit.ScriptObjectBuilder.RegisterCssReferences (Control control) d : \ E \ AjaxTk-AjaxControlToolkit \ Release \ AjaxControlToolkit \ ExtenderBase \ ScriptObjectBuilder.cs : 293 d : \ E \ AjaxTk-AjaxControlToolkit \ Release \ AjaxControlToolExtender : Extender의 ExtenderBase \ ScriptObjectBuilder.cs : 293 System.Web.UI.Control.LoadRecursive () +50 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Control.LoadRecursive () +141 System.Web.UI.Page.ProcessRequestMain (부울 includeStagesBeforeAsyncPoint, 부울 includeStagesAfterAsyncPoint) +627 버전 정보 : Microsoft .NET Framework 버전 : 2.0.50727.3074; ASP.NET 버전 : 2.0.50727.3074
자리 표시자를 사용자 정의 컨트롤에 넣고 텍스트 상자와 슬라이더 익스텐더를 프로그래밍 방식으로 자리 표시 자에 추가하려고 시도했지만 여전히 오류가 발생합니다.
간단한 코드는 다음과 같습니다.
<table cellpadding="0" cellspacing="0" style="width:100%">
<tbody>
<tr>
<td></td>
<td>
<asp:Label ID="lblMaxValue" runat="server" Text="Maximum" CssClass="float_right" />
<asp:Label ID="lblMinValue" runat="server" Text="Minimum" />
</td>
</tr>
<tr>
<td style="width:60%;">
<asp:CheckBox ID="chkOn" runat="server" /><asp:Label ID="lblPrefix" runat="server" />: <asp:Label ID="lblSliderValue" runat="server" /> <asp:Label ID="lblSuffix" runat="server" />
</td>
<td style="text-align:right;width:40%;">
<asp:TextBox ID="txtSlider" runat="server" Text="50" style="display:none;" />
<ajaxToolkit:SliderExtender ID="seSlider" runat="server"
BehaviorID="seSlider"
TargetControlID="txtSlider"
BoundControlID="lblSliderValue"
Orientation="Horizontal"
EnableHandleAnimation="true"
Length="200"
Minimum="0"
Maximum="100"
Steps="1" />
</td>
</tr>
</tbody>
</table>
무엇이 문제입니까?
먼저 <% = 대신 <% #로 코드 블록을 시작하십시오.
<head id="head1" runat="server">
<title>My Page</title>
<link href="css/common.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script>
</head>
코드 블록을 Response.Write 코드 블록에서 데이터 바인딩 식으로 변경합니다. 데이터 바인딩 표현식은 코드 블록이 아니기
때문에 <%# ... %>
CLR은 불평하지 않습니다. 그런 다음 마스터 페이지의 코드에서 다음을 추가하십시오.
protected void Page_Load(object sender, EventArgs e)
{
Page.Header.DataBind();
}
방금이 문제에 부딪 쳤지 만 다른 해결책을 찾았습니다.
asp : PlaceHolder-tag로 코드 블록을 래핑하면 문제가 해결됩니다.
<asp:PlaceHolder runat="server">
<meta name="ROBOTS" content="<%= this.ViewData["RobotsMeta"] %>" />
</asp:PlaceHolder>
(내가 사용하는 CMS는 일부 코드에서 헤드 섹션에 삽입되어 메타 태그 등과 같은 다양한 정보가 포함 된 사용자 정의 제어 블록을 추가 할 수 없도록 제한했기 때문에 이것이 나를 위해 작동하는 유일한 방법입니다.)
<% %>
태그가 있는 자바 스크립트를 헤드에서 양식 태그로 이동하면이 오류가 해결 된다는 것을 확인할 수 있습니다
http://italez.wordpress.com/2010/06/22/ajaxcontroltoolkit-calendarextender-e-strana-eccezione/
자바 스크립트를 div 태그 아래에 놓습니다.
<div runat="server"> //div tag must have runat server
//Your Jave script code goes here....
</div>
작동합니다 !!
페이지에서 스크립트 관리자를 사용하는 경우 동일한 기능을 수행 할 수 있습니다. 다음과 같이 스크립트를 등록해야합니다.
<asp:ScriptManager ID="ScriptManager1" runat="server" LoadScriptsBeforeUI="true" EnablePageMethods="true">
<Scripts>
<asp:ScriptReference Path="~/Styles/javascript/jquery.min.js" />
</Scripts>
</asp:ScriptManager>
사용자 컨트롤에서 동일한 문제가 발생했습니다. 컨트롤을 호스팅하는 내 페이지에는 헤드 태그에 주석이 있었고 그 주석을 제거했습니다. 모든 것이 나중에 작동했습니다. 일부 게시물은 스크립트를 헤드에서 제거하여 본문에 배치 할 것을 제안합니다.
나는 <%# %>
성공하지 않고 사용해 보았습니다 . 그런 다음 Page.Header.DataBind();
코드를 변경 하고 this.Header.DataBind();
정상적으로 작동했습니다.
내 경우에는으로 교체 <%= %>
되었으며 <%# %>
작동했습니다!
body 태그 안에 자바 스크립트 코드를 유지하십시오
<body>
<script type="text/javascript">
</script>
</body>
"<% #"데이터 바인딩 기술은 <head> 태그의 <link> 태그 내에서 직접 작동하지 않습니다.
<head runat="server">
<link rel="stylesheet" type="text/css"
href="css/style.css?v=<%# My.Constants.CSS_VERSION %>" />
</head>
위의 코드는
<head>
<link rel="stylesheet" type="text/css"
href="css/style.css?v=<%# My.Constants.CSS_VERSION %>" />
</head>
대신 다음을 수행해야합니다 (내부 두 개의 큰 따옴표를 참고하십시오).
<head runat="server">
<link rel="stylesheet" type="text/css"
href="css/style.css?v=<%# "" + My.Constants.CSS_VERSION %>" />
</head>
원하는 결과를 얻을 수 있습니다.
<head>
<link rel="stylesheet" type="text/css" href="css/style.css?v=1.5" />
</head>
나는이 문제가 있었지만 헤더를 통해서는 아니었다. 내 자리 표시자는 본문에있었습니다. 그래서 나는 모든 교체 <%=
로 <%#
와했다
protected void Page_Load(object sender, EventArgs e)
{
Page.Header.DataBind();
}
그리고 효과가있었습니다.
다른 방법은 다른 .aspx 페이지를 연결하려는 페이지로 사용하는 것입니다.
마스터 페이지의 헤더는 다음과 같습니다.
<head runat="server">
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
<link href="CSS/AccordionStyles.aspx" rel="stylesheet" type="text/css" />
</head>
참조 된 .aspx 양식에는 다음 내용이 포함됩니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AccordionStyles.aspx.cs" Inherits="IntranetConnectCMS.CSS.AccordionStyles" %>
.AccordionHeader
{
cursor: pointer;
background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneHeaderClosed.png") %>);
background-repeat: no-repeat;
}
.AccordionHeaderSelected
{
cursor: pointer;
background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneHeaderOpen.png") %>);
background-repeat: no-repeat;
}
.AccordionContent
{
background-image: url(<%=ResolveUrl("~/Images/Backgrounds/AccordionPaneContent.png") %>);
background-repeat: no-repeat;
}
마지막으로 브라우저에 CSS 내용을 보내려면 .aspx 페이지가 필요합니다.
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "text/css";
}
나는 또한 같은 문제에 직면했다. 다음과 같은 해결책을 찾았습니다.
해결 방법 1 : 스크립트 태그를 본문에 보관했습니다.
<body>
<form> . . . . </form>
<script type="text/javascript" src="<%= My.Working.Common.Util.GetSiteLocation()%>Scripts/Common.js"></script> </body>
이제 태그와 관련된 충돌이 해결됩니다.
해결책 2 :
코드 블록을 <% = 대신 <% #로 바꾸기 와 같은 위의 솔루션 중 하나를 해결할 수도 있지만 문제는 상대 경로 만 제공한다는 것 입니다. 정말 절대 경로 를 원한다면 작동하지 않습니다.
솔루션 1이 저에게 효과적입니다. 다음은 당신의 선택입니다.
나는 같은 문제가 있었지만 JavaScript와 관련이 없었습니다. 이 코드를 고려하십시오.
<input id="hdnTest" type="hidden" value='<%= hdnValue %>' />
<asp:PlaceHolder ID="phWrapper" runat="server"></asp:PlaceHolder>
<asp:PlaceHolder ID="phContent" runat="server" Visible="false">
<b>test content</b>
</asp:PlaceHolder>
이 상황에서는 PlaceHolders에 유해한 코드 블록이 없더라도 서버가 아닌 컨트롤 hdnTest가 코드 블록을 사용하기 때문에 동일한 오류가 발생합니다.
hdnTest에 runat = server를 추가하면 문제가 해결됩니다.
나는 퍼팅하여이 같은 오류를 해결 <script>
안에 a를 contentplaceholder
내부 <head>
대신 퍼팅 <script>
(가) 말했다 외부에서 contentplaceholder
내부를<head>
다른 상황에서도 같은 문제가있었습니다.
body 태그 안에 간단한 요소가있었습니다.
해결책은 다음과 같습니다.
<asp:PlaceHolder ID="container" runat="server">
<a id="child" href="<%# variable %>">Change me</a>
</asp:PlaceHolder>
protected new void Page_Load(object sender, EventArgs e)
{
Page.Form.DataBind(); // I neded to Call DataBind on Form not on Header
container.InnerHtml = "Simple text";
}
내 시스템에서 동일한 문제가 발생하여 페이지에서 JavaScript 코드를 제거하여 body 태그를 닫기 직전에 본문에 넣었습니다.
경우에 따라 ResolveUrl 및 ResolveClientUrl이 작동하지만 특히 js 스크립트 파일의 경우 항상 작동하지는 않습니다. 어떤 페이지에서는 작동하지만 다른 페이지로 이동하면 특정 페이지의 상대 경로로 인해 작동하지 않을 수 있습니다.
그래서 마지막으로 제 제안은 모든 자바 스크립트 참조가 올바른지 여부에 대해 항상 사이트 페이지를 완전히 다시 확인하는 것입니다. Chrome에서 사이트를 열고-> 페이지를 마우스 오른쪽 버튼으로 클릭하고-> 소스 페이지보기를 클릭하십시오.-> HTML이 나타납니다. 제대로 작동하면 다른 브라우저 창에서 js 파일을 열어야합니다. 그렇지 않으면 열리지 않습니다.
헤드 태그 외부에서 자바 스크립트 코드를 작성하면 확실히 작동합니다. 내 자바 스크립트 코드를 복사하여 페이지 하단에 붙여 넣을 때 해결됩니다. 이전에는 양식 태그를 닫기 직전에 HEAD 태그에 배치되었습니다.
</div>
<script>
function validate() {
try {
var username = document.getElementById("<%=txtUserName.ClientID%>").value;
var password = document.getElementById("<%=txtPWD.ClientID%>").value;
if (username == "" && password == "")
alert("Enter Username and Passowrd");
else {
if (username == "")
alert("Enter Username");
else if (password == "")
alert("Enter Password");
}
}
catch (err) {
}
}
</script>
</form>
서버 태그가있는 부분을 제거하고 코드 뒤에서 동적 컨트롤을 추가하려는 경우 다른 곳에 배치하십시오.
페이지의 헤드 섹션에서 JavaScript를 제거하고 페이지 본문에 추가하여 작동시킵니다.
내 경우에는 InnerText를 html이있는 div로 잘못 설정했기 때문에이 오류가 발생했습니다.
예:
SuccessMessagesContainer.InnerText = "";
<div class="SuccessMessages ui-state-success" style="height: 25px; display: none;" id="SuccessMessagesContainer" runat="server">
<table>
<tr>
<td style="width: 80px; vertical-align: middle; height: 18px; text-align: center;">
<img src="<%=Image_success_icn %>" style="margin: 0 auto; height: 18px;
width: 18px;" />
</td>
<td id="SuccessMessage" style="vertical-align: middle;" class="SuccessMessage" runat="server" >
</td>
</tr>
</table>
</div>
태그가 인 태그 <%= %>
에서는 작동하지 않습니다 runat="server"
. 당신의 코드를 이동 <%= %>
에 runat="server"
타 태그 (에 body
, head
...), 또는 제거 runat="server"
컨테이너.
'Programing' 카테고리의 다른 글
int에서 자릿수를 얻는 방법? (0) | 2020.02.28 |
---|---|
열거 형“상속” (0) | 2020.02.28 |
범위에서 CSS 고정 너비 (0) | 2020.02.28 |
Visual Studio Code에서 편집기와 통합 터미널 간 포커스 전환 (0) | 2020.02.28 |
목록 사이의 간격 (0) | 2020.02.28 |