2009-10-26 50 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