2013-01-08 42 views
0

我有一个锚标记,一个AsyncFileUpload控件和一个跨度。当文件存在于数据库中时,锚标签的InnerText被设置,如果不存在,它将被隐藏。它还有一个下载文件的ServerClick事件。回发文件下载

span标签的InnerText显示使用AsyncFileUpload OnUploadedComplete上传的文件的文件名。

当我点击锚时,文件下载(这是很好的)。但是当我改变文件(使用AsyncFileUpload)时,它回发并且锚标签的ServerClick方法再次被触发,因此再次下载文件。

<a id="lnkDownloadFile" runat="server"></a> 
<span id="spnFilename" runat="server"></span> 
<input type="button" id="btnReplaceFile" value="Replace File" runat="server" /> 
<div> 
    <ajaxToolkit:AsyncFileUpload ID="fuFile" runat="server" OnUploadedComplete="UploadComplete" OnClientUploadError="UploadError" /> 
</div> 

有没有办法解决这个问题?

谢谢。

回答

0

我不确定为什么会发生这种情况,但其中一种解决方法是使用隐藏字段来确认是否由于点击下载链接而发生回发。例如,

<input type="hidden" id="downloadFile" runat="server" /> 
<asp:LinkButton id="lnkDownloadFile" runat="server" OnClientClick="return setDownloadFile();" /> 
<script type="text/java-script" > 
function setDownloadFile() { 
     document.getElementById('<%= downloadFile.ClientID>').value = 'true'; 
     return true; 
} 
</script> 

您可以点击链接按钮中的downloadFile值来确定是否下载文件。请注意,我已使用LinkButton,因为我确信它的客户端点击属性 - 您可以尝试使用html锚点的点击属性(我不是100%确定它是否会与ServerClick事件处理程序进行交易)。

+0

这就是我所做的。想知道是否有更“富有魅力”的解决方案。谢谢你,@VinayC :) – dork

+0

@omgdork,要找到其他解决方案,你可能需要找到问题的根源,即为什么'AsyncFileUpload'回传行为像以前的元素回发。我会开始使用诸如fiddler/firebug之类的工具,并开始查看ASP.NET隐藏字段,例如'__EventArgument' /'__EventTarget'。 – VinayC