在ASP.NET C#中获取.ClientID的问题

时间:2011-08-22 13:05:42

标签: javascript asp.net ajax clientid

我在AJAX工具包的AsyncFileUpload的uploadError javascript函数中有以下内容:

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

不幸的是,ClientID调用返回Null,因此javascript错误。

我还注意到,一旦页面加载,我的控件都没有通常的.NET格式:E.G。:

<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>

我认为这是同一个问题,但不知道为什么会发生这种情况。

5 个答案:

答案 0 :(得分:8)

问题是你使用的<%#语法只能在绑定(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 :(得分:1)

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

尝试那样

答案 2 :(得分:1)

为您的客户ClientIDMode="Static"

设置

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

答案 3 :(得分:1)

id建议不要强制静态和限制自己控件的C#ASP范围,而是建议转义特殊字符

document.getElementById('/</%= uploadResult.ClientID /%/>').innertext = "xyz or whatever";

如果需要,将其置于循环中并迭代每个函数elementsArr并将其更改为

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

但最好的解决方案是使用sizzle(jquery)搜索所有以ctl00开头的id的元素,asp元素默认情况下前缀为ctl00。

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

//使用this函数将id调用到变量,然后在下划线(_)上分割

//将最后一个值推入数组... ,即所有下划线后的最后一项始终是真实的id。并且以这种方式使用sizzle你只使用asp元素,这要归功于它很棒的选择器,它是lol - 代码更少,做得更多。     });

我真的为速记道歉,但是它的latenight,我之前做过这个并且它是我知道的最稳定的选项,你不会通过修改标准细节来引起任何冲突。 (总是做不好的事)

答案 4 :(得分:0)

您可以将ClientID模式设置为静态,也可以尝试使用UniqueID而不是ClientID。