开发者

jQuery function before the Postback for FileUpload in ASP.NET

So, I have an .aspx webpage as follows开发者_运维百科:

.. 
<form id="frm" runat="server">
    <asp:FileUpload  runat="server" id="fileupload" onchange="browsed()" />
    <asp:Button runat="server" OnClick="Upload_Click" id="uploadbutton" class="uploadbutton" Text="start upload" Enabled="false" />
    <div id="nfo" style="display: none">
         blabla
    </div>
</form>
..

Now, as you can guess correctly, user chooses file to upload, clicks #uploadbutton and, voila, Upload_Click is called after the postback. Then, I want to show div #nfo with some jQuery effects during the upload. To do this, I write:

$(function() {
    $('.uploadbutton').click(function() {
        $('#nfo').slideDown().show("fast");
     })
})

and everything works just fine, until the user starts browsing in IE... First of all, in IE, user has to click #uploadbutton twice - first time to display #nfo, second time, for some reason, to initiate postback. Secondly, after the postback, Upload_Click's this.fileupload.HasFile shows false. FF and Chrome works quite well though.

As far, as I can understand this - in IE jQuery's function prevents something important for asp:FileUpload from happening and stops the postback. Though, on the second click it does initiate the postback, but still with no info for asp:FileUpload's Upload_Click.

Any help?


Update: followed @joelt'd advice. turned out, there was some different problem, never thought it could be of importance, so I didn't provide source code for that part =( see localizing <asp:FileUpload>. IE problem


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $("#Button1").click(function() {
                $("#progress").show();
            });
        });

    </script>
</head>
<body>
<form runat="server">
    <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Button1" runat="server" Text="Button" />
    <div id="progress" style="display:none; background-color:Red;">test</div>
</form>
</body>
</html>

This works fine for me in FF and IE7, except in IE, the progress indicator doesn't really give you anything because of how it's rendering, I suppose. I would say the biggest difference between our code is the "onchange=browsed()" function. It's possible that's not getting called until you click the button? In any case, I would start with a stripped down page like this, and start adding in other elements you have until it breaks.


try this:

<asp:Button runat="server" OnClick="Upload_Click" id="uploadbutton" 
   class="uploadbutton" Text="start upload" Enabled="false" 
   OnClientClick="return myFunction();"/>

<script type="text/javascript">
function myFunction(){
    $('#nfo').slideDown().show("fast");
    return true;//THIS WILL FIRE POSTBACK EVENT
   //return false;//THIS WILL STOP POSTBACK EVENT, WHICH YOU MAY WANT IF THERE 
                  //IS NO FILE SELECTED
}
</script> 
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜