无法修改Controls集合,因为该控件包含代码块(即<%...%>)错误

时间:2013-06-18 21:29:41

标签: c# asp.net user-controls

代码应该可以工作,但它给了我这个错误..反汇编说这个“AjaxControlToolkit.ExtenderControlBase.OnLoad(System.EventArgs)”

 var timeoutID;

    function delayedAlert() {
        document.getElementById('<%= Label3.ClientID %>').style.display = 'inherit';
            timeoutID = window.setTimeout(labelhide, 3000);
    }

    function labelhide() {
        document.getElementById('<%= Label3.ClientID %>').style.display = 'none';
    }

文本框

 <asp:Button ID="Button1" runat="server"  Onclick = "Button1_Click" 
            OnClientClick = "javascript:delayedAlert(); return SubmitForm();" 
            Text="Submit" Width="98px"/>

标签

<asp:Label ID="Label3" runat="server" Text="Entry Successful!" Visible="False" ForeColor="Lime"  ></asp:Label>

1 个答案:

答案 0 :(得分:0)

如果暂时忘记导致错误的原因,结果是页面抱怨无法呈现错误,因为找到了<%= %>直接呈现到页面的字符串。

一种解决方案是使用Literal控件并在代码后面呈现我们喜欢的代码。

例如:

function delayedAlert() {
    document.getElementById('<asp:Literal runat="server" id="txtTheId" EnableViewState="false" />').style.display = 'inherit';
        timeoutID = window.setTimeout(labelhide, 3000);
}

以及

背后的代码
txtTheId.Text = Label3.ClientID.ToString();

当然这只是绕过错误的想法,你可以在代码后面渲染完整的javascript,你注册脚本或者你可以只将id作为变量呈现。

例如:

<asp:Literal runat="server" id="txtTheId" EnableViewState="false" />    
var timeoutID;

function delayedAlert() {
    document.getElementById(Label3ID).style.display = 'inherit';
        timeoutID = window.setTimeout(labelhide, 3000);
}

function labelhide() {
    document.getElementById(Label3ID).style.display = 'none';
}

并且你背后的代码有

txtTheId.Text = "var Label3ID='" + Label3.ClientID + "';";