2013年5月8日 星期三

ASP.NET FileUpload取不到完整路徑+遇到Postback將元件值清除問題的解法

在頁面中,任何postback都會將FileUpload元件上所選取的欄位清空,可能是資料檢核、下拉選單的change事件等等,造成使用者已經選取檔案路徑,操作其他元件卻又遺失的問題。

IE8 Security
上面關鍵字File Upload Control有說明
我試過firefox、chrome、IE8 above瀏覽器都有問題,無法用網路上說明的解法使用Fileupload.PostedFile.FileName取得檔案路徑。其他解法是說明要加入安全性網站,但我不想要做這種需要特殊設定才能執行的功能。

解決方法:使用javascript及Callback取代Postback

實作ICallbackEventHandler
用戶端回呼實作 (C#) 範例 

1.須繼承System.Web.UI.ICallbackEventHandler

public partial class ClientCallback : System.Web.UI.Page,
     System.Web.UI.ICallbackEventHandler
 
2.實作以下兩個Method

public void RaiseCallbackEvent(String eventArgument)
{
//javascript 呼叫function 
//eventArgument為javascript傳入的參數,如本範例中的sCardNO
 }
public String GetCallbackResult()
{
   //javascript可接收到的值 
 return returnValue;
}
 
3. javascript部份寫法
 
//呼叫RaiseCallbackEvent
function GetBoss1Info()
{
//傳入參數:sCardNO
//回傳接收的function
   <%= Page.ClientScript.GetCallbackEventReference(this, "sCardNO", "ProcessResult1", null) %>;
}
//GetCallbackResult回傳
function ProcessResult1(returnmessage, context)
{
  //returnmessage為回傳資料
}

沒有留言:

張貼留言