2

在我的項目中我需要上傳文件所以我決定使用asp.net提供的上傳器ajax控件AsyncFileUPloader控件。 有四個塊。每塊包含兩個這樣的上傳 所以我決定利用asp.net網頁用戶控件的力量。 我裹在我的叫DesignUploader.ascx 用戶控制所需的表單字段現在我必須把這個控件的四個實例我的aspx頁面上 請參考下面Ajax控件工具包AsyncFileUploader控件和viewstate/session問題

enter image description here

我的問題就在這裏開始扣我必須將fileurl插入數據庫,並且在將文件上傳到服務器後,每個塊都會生成唯一的id和id值更改。我注意到viewstate在我的情況下不適用於asyncfileuploader,它清除了視圖狀態,因爲它在後臺執行祕密回發到服務器。現在唯一的選擇留給我的是使用會議但用戶從第二/第三連續塊上傳文件時,在兩個街區陸續那麼文件路徑覆蓋我的會議。我不知道有多少塊用戶可以用來上傳他可能使用1的設計,或者他可以使用全部四塊。

會有一個最終在頁面底部提交點擊其中的我必須將數據插入到數據庫按鈕。

因此,當我試圖將數據保存到數據庫中的會話存儲所有的記錄,我的問題最近上傳的文件路徑的價值就在這裏

我不知道如果我能以正確的方式描述我的問題或不請原諒,如果不明確,並發表評論,如果需要。

注:因爲客戶堅持這只是:(

任何快速解決辦法,將不勝感激多

感謝 Devjosh

回答

2

我相信你保存文件路徑,我不能更改UI會議以錯誤的方式,它是無法識別哪裏是沒有代碼中的錯誤。 一路,更好我認爲不會持續文件路徑會話,但使用客戶端用於這一目的,而不是,你可以添加兩個隱藏字段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事件的這種方式,但是當我在服務器端設置的隱藏字段onFileUploaded事件hiddenfield不更新/套和這就是爲什麼我使用的會話,現在存儲作爲替代 我因爲我離開了我的工作場所,所以無法發佈代碼。因爲你提出了一個自定義事件,我還沒有嘗試過這種方式。我會嘗試並讓你知道 – Devjosh 2012-04-22 11:19:20

+0

我的代碼中沒有自定義事件。 「UploadedComplete」事件處理程序中的隱藏字段值不能異步執行。但是您可以在其中註冊JavaScript來更新客戶端上的隱藏字段值。在提議的代碼中使用這種情況。請注意,由於AsyncFileUpload在框架中執行,您必須在父框架中調用'$ get'功能。 – 2012-04-22 11:35:00

+0

OK @yuriy我會嘗試這一點,並讓你知道明天再次感謝 – Devjosh 2012-04-22 15:10:19