2012-11-30 48 views
3

我使用的是asyncfileupload控制上傳文件有我走的路徑在視圖狀態是這樣的:使用C#在asp.net中的Viewstate沒有獲得價值?

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
{ 
    string name = System.IO.Path.GetFileName(e.FileName); 
    string dir = Server.MapPath("upload_eng/"); 
    string path = Path.Combine(dir, name); 
    ViewState["path"] = path; 
    engcertfupld.SaveAs(path); 
} 

現在,當我試圖保存在ButtonClick事件我沒有得到這條道路視圖狀態的值:

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    string filepath = ViewState["path"].ToString(); // GETTING NULL in filepath 
} 

在這個文件路徑我得到空其實我得到錯誤NULL REFERENCE EXCEPTION

我現在該怎麼辦?

回答

2

把路徑值在Session對象,而不是視圖狀態,像這樣:

protected void ProcessUpload(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
{ 

    .... 
    string path = Path.Combine(dir, name); 
    Session["path"] = path; 
} 

然後在按鈕點擊:

protected void btnUpdate_Click(object sender, EventArgs e) 
{ 
    if (Session["path"] != null) 
    { 
    string filepath = (string) Session["path"]; 
    } 
} 
+0

是的,我已經做了這個我得到的結果,但我仍然想知道爲什麼viewstate沒有工作? –

1

我想上傳過程是不是「真正的」回傳,這樣的ViewState不會被刷新客戶端並不會包含在btnUpdate_Click在點擊路徑

你應該做的就是使用OnClientUploadComplete客戶端在事件中檢索上傳的文件名,並將其存儲在將在btnUpdate_Click上的服務器上發佈的HiddenField中。

這裏是上載的文件名使用沒有回交以顯示上傳的圖像的完整的例子:

http://www.aspsnippets.com/Articles/Display-image-after-upload-without-page-refresh-or-postback-using-ASP.Net-AsyncFileUpload-Control.aspx

+0

但我最初在'ProcessUpload'中的viewstate中獲得了一個值,但是它的回發或不是視圖狀態應該有我想要的值 –

+1

@ArindamDas:在ProcessUpload中設置的值不會被髮送回客戶端被張貼回服務器(因爲這不是真正的回傳)。服務器不在回發之間存儲ViewState。它是將ViewState存儲在(某個時間很長)隱藏字段並將其發回服務器的客戶端。如果未發生回發往返過程,則服務器無法將ViewState傳輸到客戶端。這就是爲什麼我建議使用客戶端事件處理 – jbl