2009-10-26 45 views
0

我採取一些SharePoint列表是需要上傳文件,把列表中的文件目錄下一個名爲/Lists/{ListName}/{RecordId}/filename.ext的SharePoint文件的FieldType

文件夾下我如何使用fieldType來實現這一點,它獲取FileUpload WebControl來呈現,但沒有收到文件(FileUpload.HasFile總是返回false)頁面加載檢查Page.IsPostBack?

public class UploadControl : BaseFieldControl { 

    protected FileUpload fileupload; 

    protected override void CreateChildControls() 
    { 
     base.CreateChildControls(); 
     //FIX FOR PROBLEM 
     Page.Form.Enctype = "multipart/form-data"; 
     //FIX FOR PROBLEM 

     if (ControlMode == SPControlMode.Edit || ControlMode == SPControlMode.New || PreviousControlMode == SPControlMode.Edit) 
     { 
      fileupload = new FileUpload(); 
      fileupload.ID = "fileUpload"; 
      Controls.Add(fileupload); 
     } 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     if (fileupload != null && Page.IsPostBack) 
      throw new Exception("Uploaded Has File " + fileupload.HasFile); 
      //Always Returns False 
    } 

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

    public override object Value 
    { 
     get 
     { 
      EnsureChildControls(); 
      if (ControlMode == SPControlMode.New || ControlMode == SPControlMode.Edit) 
       return "FileName.EXT"; 
      return ""; 
     } 
     set 
     { 
      EnsureChildControls(); 
      var str = (String)value; 
     } 
    } 

} 

回答

1

我不是背後的SharePoint頁面的代碼完全確定(沒有一個方便的),但可以肯定的形式標記作爲具有一個:因爲它是需要

enctype='multipart/form-data' 

屬性用於文件上傳。如果不是,則可以在早期頁面循環方法中始終執行

Form.Enctype = "multipart/form-data" 

。此外,請確保上傳不是異步發生的,例如在更新面板中,因爲我不相信它是允許的。

+0

非常感謝你的工作! (我的兩小時工作變成2天):D – 2009-10-26 04:07:29