2

В моем проекте мне нужно загрузить файлы, поэтому я решил использовать загрузчик, предоставленный asp.net. Элементы управления ajax AsyncFileUPloader. есть четыре блока. каждый блок содержит два таких загрузчика , поэтому я решил использовать власть пользовательских элементов управления asp.net. я завернула необходимые поля формы в моем пользовательский элемент управления под названием DesignUploader.ascx Теперь я должен поставить четыре экземпляра этого элемента управления на моей странице ASPX см хватку нижеAjax Control Toolkit AsyncFileUploader Control и viewstate/session Проблема

enter image description here

моя проблема начинается здесь я должен вставить файл в базу данных, и каждый из блоков генерирует уникальные изменения идентификатора и идентификатора после загрузки файла на сервер. я заметил, что viewstate не работает для меня в случае asyncfileuploader, он очищает viewstate, потому что он делает секретную обратную передачу на сервер за кулисами. теперь только для меня остается использовать сеанс, но когда пользователь загружает файлы в два блока один за другим, тогда путь файла из вторых/третьих последовательных блоков перезаписывает мой сеанс. я не знаю, сколько блоков пользователь может использовать для загрузки проектов, которые он может использовать только 1, или он может использовать все четыре.

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

поэтому, когда я попытался сохранить данные в базу данных сессии хранит значение недавно закачанный путь к файлу для всех записей моей проблемы заключается здесь

я не знаю, если я был в состоянии чтобы правильно описать мою проблему или нет, пожалуйста, извините меня, если это не ясно, и отправьте комментарий, если потребуется.

Примечание: Я не могу изменить интерфейс, потому что клиент настаивает на этом только :(

любая быстрая работа вокруг будут оценены гораздо

Благодаря Devjosh

ответ

2

Я считаю, что вы путь сохранения файла сеанс неправильным образом, и невозможно определить, где ошибка без кода. В любом случае, на мой взгляд, лучше не останавливать путь к файлу в сеансе, но вместо этого использовать для этого клиентскую сторону. Вы можете добавить два скрытых поля в DesignUploader.ascx контролирует и устанавливает их значение s в UploadedComplete обработчик события.

public partial class DesignUploader : System.Web.UI.UserControl 
{ 
    private static readonly string AppDataPath = HttpContext.Current.Server.MapPath("~/App_Data/"); 

    public string FirstFilePath 
    { 
     get 
     { 
      return Server.UrlDecode(FirstFilePathHiddenField.Value); 
     } 
    } 

    public string SecondFilePath 
    { 
     get 
     { 
      return Server.UrlDecode(SecondFilePathHiddenField.Value); 
     } 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 

     FirstFileUpload.UploadedComplete += FirstFileUpload_UploadedComplete; 
     SecondileUpload.UploadedComplete += SecondileUpload_UploadedComplete; 
    } 

    void FirstFileUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
    { 
     var fullPath = Path.Combine(AppDataPath, Path.GetFileName(e.FileName)); 
     FirstFileUpload.SaveAs(fullPath); 
     SaveFilePathToHiddenField(FirstFilePathHiddenField.ClientID, fullPath); 
    } 

    void SecondileUpload_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
    { 
     var fullPath = Path.Combine(AppDataPath, Path.GetFileName(e.FileName)); 
     SecondileUpload.SaveAs(fullPath); 
     SaveFilePathToHiddenField(SecondFilePathHiddenField.ClientID, fullPath); 
    } 

    private void SaveFilePathToHiddenField(string fieldId, string pathValue) 
    { 
     var script = string.Format("top.$get('{0}').value = '{1}';", fieldId, Server.UrlEncode(pathValue)); 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "setPath", script, true); 
    } 
} 
+0

благодарит за ответ. да, как вы сказали, я пробовал этот способ хранения файлового пути onfileuploaded event, но когда я установил скрытое поле на стороне сервера onFileUploaded, это скрытое поле не обновляет/устанавливает, и именно поэтому я использовал сеанс для хранения в качестве альтернативы прямо сейчас i не может отправлять код, поскольку я вне рабочего места. поскольку вы подняли пользовательское событие, я не пробовал этот способ. Я дам ему попробовать и дам вам знать. – Devjosh

+0

В моем коде нет специальных событий. Вы не можете установить значение скрытого поля в обработчике событий UploadedComplete, поскольку оно выполняется асинхронно. Но вы можете зарегистрировать javascript в нем, чтобы обновить значение скрытого поля на клиенте. Это используется в предлагаемом коде. Обратите внимание, что при выполнении AsyncFileUpload в кадре вы должны вызывать функцию '$ get' в родительском фрейме. –

+0

ok @yuriy Я попробую это и дам вам знать завтра снова спасибо – Devjosh