2010-04-01 7 views
0

J'ai une liste avec un formulaire personnalisé qui contient un contrôle de téléchargement de fichier personnalisé. Dès que l'utilisateur sélectionne un fichier et clique sur le téléchargement, je veux que ce fichier accède directement à la liste des pièces jointes dans ce listitem. Toutefois, lors de l'ajout du fichier à SPContext.Current.ListItem.Attachments sur un nouvel élément, la pièce jointe n'apparaîtra pas dans la liste après l'enregistrement. Si j'utilise à la place item.Update() sur le nouvel élément après l'ajout de la pièce jointe, j'obtiens une erreur dans Sharepoint, mais quand je reviens à la liste, l'élément est là avec sa pièce jointe. Il semble qu'il essaie de créer 2 nouvelles entrées à la fois quand je sauvegarde (item.Update) ce qui entraîne la deuxième de ces accidents.Sharepoint NewForm Ajout de pièces jointes par programme

Quelle serait la bonne façon d'ajouter des pièces jointes de cette façon?

oSPWeb.AllowUnsafeUpdates = true; 

// Get the List item 
SPListItem listItem = SPContext.Current.ListItem; 

// Get the Attachment collection 
SPAttachmentCollection attachmentCollection = listItem.Attachments; 

Stream attachmentStream; 
Byte[] attachmentContent; 

// Get the file from the file upload control 
if (fileUpload.HasFile) 
{ 
    attachmentStream = fileUpload.PostedFile.InputStream; 

    attachmentContent = new Byte[attachmentStream.Length]; 

    attachmentStream.Read(attachmentContent, 0, (int)attachmentStream.Length); 

    attachmentStream.Close(); 
    attachmentStream.Dispose(); 

    // Add the file to the attachment collection 
    attachmentCollection.Add(fileUpload.FileName, attachmentContent); 
} 

// Update th list item 
listItem.Update(); 

Répondre

0

Essayez d'utiliser SPAttachmentCollection.AddNow(string, byte[]) au lieu de SPAttachmentCollection.Add(string, byte[]). Utiliser AddNow signifie également que vous n'aurez pas à appeler le SPListItem.Update(). AddNow appellera une mise à jour de son propre chef, sans provoquer d'erreurs autant que j'ai vu. Mis à part ce changement, j'ai une méthode qui fonctionne presque exactement comme votre code fourni, donc cela devrait fonctionner de cette façon.