问题越来越.ClientID在ASP.NET C#

问题描述:

我已经中的javascript uploadError时功能AsyncFileUpload从AJAX工具包以下:问题越来越.ClientID在ASP.NET C#

function uploadError(sender, args) { 
    document.getElementById("<%# uploadResult.ClientID %>").innerText = args.get_fileName(), "<span style='color:red;'>" + args.get_errorMessage() + "</span>"; 
} 

不幸的是,ClientID调用返回Null,所以JavaScript错误。

我也注意到,没有我的控件具有通常的.NET格式一旦页面加载:EG:

<asp:Label runat="server" Text="Select an image to upload it to this stock item...." ID="uploadResult" /> 

通常会呈现这样的:

<span id="ctl00_ContentPlaceHolder1_uploadResult">Choose a webstock file to upload...</span> 

但与此文件它呈现为:

<span id="uploadResult">Select an image to upload it to this stock item....</span> 

我认为这是相同的问题,但不知道为什么它是happeni NG。

+0

不知道你是否复制粘贴,但检查在实际代码中runat =“server”是否有任何拼写错误。这似乎很好 –

+0

还请确保你把完整的结束标记,如

+0

所有的runat属性都很好,完整的结局似乎没有什么区别。 –

function uploadError(sender, args) { 
    document.getElementById("<%= uploadResult.ClientID %>").innerText = args.get_fileName(), "<span style='color:red;'>" + args.get_errorMessage() + "</span>"; 

尝试这样

+1

不幸的是,这会导致“控件集合无法修改,因为控件包含代码块”错误。 –

组为您的客户ClientIDMode="Static"

或页面级别设置<%@ Page ClientIDMode="Static"

+0

嗨,我正在运行.NET 3.5。如果我没有记错,这个4.0,不是吗? –

您可以ClientID的模式设置为静态的,或者你可以尝试使用的UniqueID代替的ClientID。

+0

嗨,我正在使用ASP.NET 3.5,因此ClientIDMode不可用。 :( –

问题是您使用的<%#语法仅在绑定(evals)上执行。

你应该使用<%=将始终执行的语法。

如:

function uploadError(sender, args) 
{ 
    document.getElementById('<%= uploadResult.ClientID %>').innerText = 
     args.get_fileName() + "<span style='color:red;'>" + 
     args.get_errorMessage() + "</span>"; 
} 

Reference for more information on asp.net inline syntax.

Data-binding Syntax

Inline Syntax

编辑:请注意,您在您的任务有,innerText这也将是一个问题,如果它不是一个错字。

+1

不幸的是,导致“控件集合无法修改,因为控件包含代码块”错误 –

+0

@Ben Drury你在哪里/何时得到这个错误?可能需要更多的信息,因为它听起来像有其他东西你提供了什么导致这个问题,而不是我在答案的底部发布的问题,因为你似乎也有一个错字,可能会导致奇怪的副作用。 – Kelsey

ID建议不要强迫静态和限制自己的控件C#ASP范围,我宁愿建议转义特殊字符像这样

如果需要,可以把它放在一个循环,重复的每个功能elementsArr并将其更改为

document.getElementById('/</%= '+ elementsArr[x] +'.ClientID /%/>').innertext = "xyz or whatever"; 

但最好的办法是使用嘶嘶声(jQuery的)搜索具有开始ctl00一个ID的所有元素,ASP元素总是有ctl00默认前缀。

$("id^=ctl00").each(){ 

//使用这个函数调用的ID给一个变量,然后分裂的下划线(_)

//推上一个值到一个数组... 即最后一个项目之后的所有下划线永远是真正的ID。并使用这种方式嘶嘶声,你只能使用asp元素感谢真棒选择器它是大声笑 - 代码少,做更多。 });

我真的很为速记道歉,但它的延迟,我之前做过,它是我知道的最稳定的选项,你不会因修改标准细节而导致任何冲突。 (总是做不好)