Я использую новый элемент управления AsyncFileUpload из последней версии AjaxControl ToolKit. Мой запрос касается события OnClientUploadStarted, которое запускается до начала загрузки. Есть ли способ отменить загрузку, так как я сейчас проверяю fileExtension и хочу отменить загрузку, чтобы она не продолжалась, и продолжил загрузку файла. Мой конечный результат - разрешить загрузку только изображений. Пожалуйста, посоветуйте и спасибо за ваше время.
Элемент управления AsyncFileUpload
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
Я попытался добавить настраиваемый валидатор, однако событие проверки не запускается до тех пор, пока форма не будет отправлена, однако файл загружается мгновенно после выбора. Следовательно, я могу использовать событие OnClientUploadStarted.
- person ; 13.10.2009
Вы имеете в виду, что валидатора 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