Функция jQuery перед Postback для FileUpload в ASP.NET

Итак, у меня есть веб-страница .aspx следующим образом:

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

Теперь, как вы правильно догадались, пользователь выбирает файл для загрузки, щелкает #uploadbutton и, вуаля, после обратной передачи вызывается Upload_Click. Затем я хочу показать div #nfo с некоторыми эффектами jQuery во время загрузки. Для этого пишу:

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

и все работает нормально, пока пользователь не начнет просматривать в IE ... Прежде всего, в IE пользователь должен дважды щелкнуть #uploadbutton - первый раз, чтобы отобразить #nfo, второй раз по какой-то причине, чтобы инициировать обратную передачу. Во-вторых, после обратной передачи this.fileupload.HasFile Upload_Click показывает false. Однако FF и Chrome работают довольно хорошо.

Насколько я понимаю - в IE функция jQuery предотвращает что-то важное для asp:FileUpload и останавливает обратную передачу. Хотя при втором щелчке он инициирует обратную передачу, но по-прежнему нет информации для asp:FileUpload's Upload_Click.

Любая помощь?


Обновление: последовал совету @ joelt'd. Оказалось, что возникла другая проблема, никогда не думал, что это может иметь значение, поэтому я не предоставил исходный код для этой части = (см. локализация‹ asp: FileUpload ›. Проблема с IE


person exp    schedule 17.12.2010    source источник
comment
вернуть ложь; после функции щелчка.   -  person Andrea Turri    schedule 17.12.2010


Ответы (2)


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

У меня это отлично работает в FF и IE7, за исключением IE, индикатор прогресса на самом деле ничего вам не дает из-за того, как он отображается, я полагаю. Я бы сказал, что самая большая разница между нашим кодом - это функция onchange = browsed (). Возможно, вам не позвонят, пока вы не нажмете кнопку? В любом случае, я бы начал с такой урезанной страницы, как эта, и начал бы добавлять другие элементы, которые у вас есть, пока она не сломается.

person joelt    schedule 17.12.2010

попробуй это:

<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> 
person TheVillageIdiot    schedule 17.12.2010