SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Anpassung Filepload PDF Only für eine Liste RegularExpression

Unbeantwortet Dieser Beitrag hat 8 Antworten

Ohne Rang
302 Beiträge
Ardenda erstellt 14 März 2014 15:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

hab ein Problem mit meiner eigenen Upload-Konstruktion. Ich möchte, dass nur PDF Dateien hochgeladen werden könnten. Bekomme aber immer folgende Errormeldung

 Control 'AttachmentUpload' referenced by the ControlToValidate property of 'regpdf' cannot be validated.

 

Hier Mein Code

<table id="idAttachmentsTable" border="0" cellpadding="2" cellspacing="0">
    <tr>
     <td>
      <span id="part1">
       <SharePoint:AttachmentButton runat="server" ID="AttachmentButton" ControlMode="New" Text="Add Attachment" />
      </span>
                       
     </td>
    </tr>
    <tr>
     <td id='idAttachmentsRow'> 
                       
      <SharePoint:AttachmentUpload runat="server" ID="AttachmentUpload" ControlMode="New"  EnableViewState="true"/>
                             <asp:RegularExpressionValidator id="regpdf" text="*" errormessage="please upload only pdf files" ControlToValidate="AttachmentUpload" ValidationExpression="^.*\.(pdf|PDF)$" runat="server" Display="Dynamic"  />
             
                    </td>
    </tr>
    <tr>
     <td>
      <SharePoint:AttachmentsField runat="server" ID="AttachmentField" ControlMode="New" FieldName="Attachments" EnableViewState="true" />
              

     </td>
    </tr>
   </table>

Vielen Dank

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 März 2014 16:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Der asp:RegularExpressionValidator kann mit dem SharePoint:AttachmentUpload nichts anfangen. Ich kann Dir aber nur das Problem erklären und leider nicht sagen, wie man es anders/besser machen kann (außer durch serverseitigen Code).

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 14 März 2014 16:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

danke für die Hilfe. Ich werde noch verrückt. Wie kann ich das Serverseitig abfangen in Visual Studio? Ich hab auch das versucht. LEIDER nimmt er da auch eine Expression entgegen. Wie wäre dann der richtige weg?

 

protected void OnValidateAttachment(object sender, ServerValidateEventArgs args)

{

var a = new Attachment();

var result = true;

 

foreach (string attachment in listItem.Attachments)

{

var attachments = new List<Attachment>(this.listItem.Attachments.Count);

a.FileName = attachment;

a.NavigateUrl = listItem.Attachments.UrlPrefix + attachment;

if (a.FileName.EndsWith("pdf"))

{

result = true;

}

else

{

var v = (CustomValidator)sender;

v.ErrorMessage = string.Format("Keine PDF.");

result = false;

break;

}

}

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 14 März 2014 16:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich weiß nicht wo Du diesen Code untergebracht hast, aber der Kern ist das:

foreach (string attachment in listItem.Attachments) {
  if (attachment.ToLower().EndsWith(".pdf")) {
    // PDF
  } else {
    // kein PDF
  }
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 14 März 2014 16:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hab ich schon und es werden auch keine PDF Dateien hochgeladen. Ich will nur die Fehlemeldung auf der Seite.

 

 

 

 

 

 

 

public

 

 

 

void

DataBindAttachments()

{

 

 

 

var attachments = new List<Attachment>(this

.listItem.Attachments.Count);

 

 

 

foreach (string attachment in

listItem.Attachments)

{

 

 

 

 

var a = new Attachment

();

a.FileName = attachment;

a.NavigateUrl = listItem.Attachments.UrlPrefix + attachment;

 

 

 

if(a.FileName.EndsWith("pdf"

))

{

attachments.Add(a);

}

 

 

 

else

{

// Und wie gebe ich hier nun die Fehlermeldung an die Seite ohne dass sie speichert?

}

}

Ohne Rang
302 Beiträge
Ardenda Als Antwort am 17 März 2014 15:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

hat mri einer ein Tipp wie ich den Fehler in einem Label ausgebe und den Postback verhindere?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 März 2014 15:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du bringst da glaube ich was durcheinander. Wenn Du von vornherein den Postback verhindern möchtest, mußt Du clientseitig mit JavaScript arbeiten. Du hast oben aber serverseitigen C'-Code gepostet und der wird erst nach einem Postback ausgeführt.

Serverseitig kannst Du dazu das ItemAdding bzw. ItemUpdating-Event verarbeiten. Das kannst Du durch Setzen von properties.Status auch abbrechen (was für den Benutzer nicht sehr schön ist) oder auch alles was kein PDF ist, einfach entfernen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
302 Beiträge
Ardenda Als Antwort am 17 März 2014 16:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

danke für den Hinweis. Bin gerade dabei es hiermit zu versuchen, aber weiss noch nicht wo der Fehler ist. siehst du da was auf anhieb?

 

 

 

 

 

 

 

 

 

 

 

 

unction

 

 

 

PreSaveAction()

{

var

 

 

 

attachment;

var

 

 

 

filename=""

;

var

 

 

 

fileNameSpecialCharacters = new RegExp("^.*\.(pdf|PDF)$"

);

try

 

 

 

{

attachment = document.getElementById(

 

 

"idAttachmentsTable").getElementsByTagName("span"

)[0].firstChild;

filename = attachment.data;

}

catch

 

 

 

(e) {

}

if

 

 

 

(fileNameSpecialCharacters.test(filename)) {

alert(

 

 

"Nur PDF"

);

return

 

 

 

false

;

}

else

 

 

 

{

return

 

 

 

true

;

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 17 März 2014 16:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nein, sorry. Außerdem ist der Code so praktisch unlesbar. Wenn Du etwas aus Visual Studio kopierst, füge es zuerst in einen Texteditor wie Notepad ein und kopiere es dann von dort. Dabei gehen zwar alle Formatierungen verloren, aber das kann man immer noch besser lesen.

Trotzdem werde ich Dir (ohne es auszuprobieren) nicht viel dazu sagen können. Es sieht eigentlich ganz gut aus. Was sagt denn ein Debugger dazu? Gibt es irgendwelche Fehler? Gehe das mal im Debugger Schritt für Schritt durch und schaue Dir an was passiert.

PS: durch das ...[0].firstChild; kommst Du immer nur an den ersten Anhang. Ein Benutzer kann dann als zweite, dritte, vierte Datei locker etwas anderes hochladen.

Viele Grüße
Andi
af @ evocom de
Blog