Элемент управления AsyncFileUpload

Я использую новый элемент управления AsyncFileUpload из последней версии AjaxControl ToolKit. Мой запрос касается события OnClientUploadStarted, которое запускается до начала загрузки. Есть ли способ отменить загрузку, так как я сейчас проверяю fileExtension и хочу отменить загрузку, чтобы она не продолжалась, и продолжил загрузку файла. Мой конечный результат - разрешить загрузку только изображений. Пожалуйста, посоветуйте и спасибо за ваше время.


person Community    schedule 13.10.2009    source источник
comment
Я достаточно подробно проверил javascript и пришел к выводу, что веб-контроль вполне может остановить загрузку файла с помощью одного только javascript OnClientUploadStarted. Однако при возникновении этого события, предоставленного извне, функция вызывается функцией Sys $ EventHandlerList $ getHandler (id) строки 2901-2917 MicrosoftAjax.debug.js. Эта функция не отслеживает возвращаемые значения, что вызывает поведение по умолчанию. Посоветуйте, пожалуйста, очень близок к ответу.   -  person    schedule 13.10.2009


Ответы (3)


Получил ответ, все, что мне нужно было сделать, это переопределить функцию javascript с помощью этого скрипта (не лучший ответ, но работает), вы все могли бы сделать быстрее и чище

var orig = AjaxControlToolkit.AsyncFileUpload.prototype.raiseUploadStarted;
AjaxControlToolkit.AsyncFileUpload.prototype.raiseUploadStarted = function(e) {
var evt = this.get_events()._getEvent('uploadStarted');
if (evt) {
    if (evt.length > 1)
        return orig(e);
    else if (evt.length === 1)
        return evt[0](this, e);
    }
}
person Community    schedule 14.10.2009

Вы можете попробовать добавить в поле «Средство проверки регулярных выражений» и посмотреть, сможете ли вы использовать его для проверки выбранного файла перед началом загрузки.

person Mitchel Sellers    schedule 13.10.2009
comment
Я попытался добавить настраиваемый валидатор, однако событие проверки не запускается до тех пор, пока форма не будет отправлена, однако файл загружается мгновенно после выбора. Следовательно, я могу использовать событие OnClientUploadStarted. - person ; 13.10.2009
comment
Вы имеете в виду, что валидатора Regex недостаточно? Он имеет встроенную проверку на стороне клиента. Если вы создаете свой собственный валидатор, вы также можете присоединить клиентскую функцию. - person o.k.w; 13.10.2009

Попробуйте этот код:

protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
        {
            if (rdoFileType.SelectedValue == String.Empty)
            {
                lblStatus.Text = "Please select a file type before selecting a file.";
                AsyncFileUpload1.FailedValidation = true;
                e.state = AjaxControlToolkit.AsyncFileUploadState.Failed;
                return;
            }

            try
            {
                // System.Threading.Thread.Sleep(5000);
                if (AsyncFileUpload1.HasFile)
                {
                    string _filename = System.IO.Path.GetFileName(e.filename);


                    System.IO.FileInfo f = new System.IO.FileInfo(AsyncFileUpload1.PostedFile.FileName);

                    if (rdoFileType.SelectedValue == "F")
                    {
                        if (f.Extension != ".pdf")
                        {
                            lblStatus.Text = "Final Document must be a .pdf";
                            e.state = AjaxControlToolkit.AsyncFileUploadState.Failed;
                            e.statusMessage = "Final Document must be a .pdf";
                            throw new Exception("Final Document must be a .pdf");

                        }
person Deep Kumar    schedule 20.06.2011