我在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>
我认为这是同一个问题,但不知道为什么会发生这种情况。
答案 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.
编辑:请注意,您在,
的作业中有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。