Функция jQuery перед обратной передачей для FileUpload в ASP.NET - PullRequest
0 голосов
/ 17 декабря 2010

Итак, у меня есть веб-страница .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, второй раз, по какой-то причине, чтобы инициировать обратную передачу. Во-вторых, после обратной передачи Upload_Click s this.fileupload.HasFile показывает false. FF и Chrome работают довольно хорошо.

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

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


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

Ответы [ 2 ]

0 голосов
/ 17 декабря 2010
<%@ 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 ()".Возможно, вам не позвонят, пока вы не нажмете кнопку?В любом случае, я бы начал с такой урезанной страницы, как эта, и начал добавлять другие имеющиеся у вас элементы, пока она не сломалась.

0 голосов
/ 17 декабря 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> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...