2

我在来自 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 格式: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>

我认为这是同一个问题,但不知道为什么会这样。

4

5 回答 5

8

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

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

例如:

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

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

数据绑定语法

内联语法

编辑:请注意,如果不是拼写错误,,您的作业也将是一个问题。innerText

于 2011-08-22T14:53:42.340 回答
1

id 建议不要强制静态并限制其自己的控件的 C# ASP 范围,id 建议像这样转义特殊字符

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

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

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

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

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

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

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

我真的为速记道歉,但它深夜,我之前做过这个,它是我知道的最稳定的选择,你不会通过修改标准细节来潜在地引起任何冲突。(这样做总是不好的做法)

于 2013-08-28T20:40:25.153 回答
1
function uploadError(sender, args) {
    document.getElementById("<%= uploadResult.ClientID %>").innerText = args.get_fileName(), "<span style='color:red;'>" + args.get_errorMessage() + "</span>";

尝试这样

于 2011-08-22T13:09:56.890 回答
1

为您的客户设置ClientIDMode="Static"

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

于 2011-08-22T13:10:05.307 回答
0

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

于 2011-08-22T14:53:11.697 回答