在ASP.NET C#中获取.ClientID时出现问题

Issue getting .ClientID in ASP.NET C#

本文关键字:问题 ClientID 获取 ASP NET      更新时间:2023-09-26

我在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格式:例如:

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

我想这也是一个问题,但不知道为什么会发生。

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

您应该使用<%=语法,该语法将始终执行。

例如:

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

有关asp.net内联语法的更多信息,请参阅。

数据绑定语法

内联语法

编辑:请注意,你在分配给innerText的作业中有,,如果不是打字错误,这也是一个问题。

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

试试

为客户端ClientIDMode="Static" 设置

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

id建议不要强制静态和限制C#ASP自己控件的作用域,而是建议像一样转义特殊字符

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

如果需要,将其放入循环中,并迭代每个函数元素Arr,然后将其更改为

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

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

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

//使用此函数调用变量的id,然后在下划线(_(上拆分

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

我真的为缩写道歉,但它太晚了,我以前也这么做过,这是我所知道的最稳定的选项,你不会因为修改标准细节而潜在地引起任何冲突。(这样做总是不好的(

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