Frage

Ich habe eine benutzerdefinierte SharePoint-Anwendungsseite im Ordner „_layouts“ bereitgestellt.Es handelt sich um ein benutzerdefiniertes „neues Formular“ für einen benutzerdefinierten Inhaltstyp.Während meiner Interaktionen mit dieser Seite muss ich einen Artikel zu meiner Liste hinzufügen.Wenn die Seite zum ersten Mal geladen wird, kann ich SPContext.Current.List verwenden, um die aktuelle Liste anzuzeigen, mit der ich arbeite.Aber nachdem ich mein Formular ausgefüllt habe und das Formular auf sich selbst zurückgesendet wird und IsPostBack wahr ist, ist SPContext.Current.List null, sodass ich die Liste, zu der ich meine Inhalte hinzufügen muss, nicht finden kann.

Ist das zu erwarten?

Wie soll ich einige Informationen zu meiner Kontextliste im gesamten Postback behalten?Sollte ich einfach ein asp:hidden-Steuerelement mit der Guid meiner Liste füllen und es dann im Postback einfach daraus zurückziehen?Das scheint sicher zu sein, denke ich.

FWIW, das ist die MOSS 2007 Standardversion.

War es hilfreich?

Lösung

Im Allgemeinen versuche ich, den Ansatz der Produktgruppe zu kopieren, wenn ich eigene Funktionen hinzufügen möchte.In diesem Fall fügen sie ihre eigenen Bearbeitungs-/Anzeige-/Hinzufügenseiten über die Listendefinition selbst hinzu.

Ich habe eine Lösung erstellt, die auch ein eigenes benutzerdefiniertes „Neu“-Formular benötigte, leider kein Open Source. Bei Interesse können Sie sie jedoch herunterladen. Sie heißt „Tagged Links“ (Social Bookmarking für SharePoint) und Sie können einige Links auf meinem finden Blog.

Um Ihnen ein paar Hinweise und Tipps zu geben, sollten Ihnen die folgenden Hinweise den richtigen Weg weisen:

  1. Eine neue Listendefinition erstellt.
  2. Erstellt einen neuen Inhaltstyp. Im Inhaltstyp können Sie Ihre eigenen „FormTemplates“ definieren, die auf eine Rendering-Vorlage verweisen, die bestimmt, was im „mittleren“ Bit dieser Formulare angezeigt wird.
  3. Kopierte die Standard -Rendering -Vorlage, nahm aber die Änderungen daran vor, die ich brauchte.
  4. Alles in eine Lösung verpackt und bereitgestellt.

Meine Rendering-Vorlage enthielt tatsächlich eine überschriebene Schaltfläche „Speichern“, mit der ich einen Großteil der zusätzlichen Arbeit erledigte, die ich beim Speichern erledigen musste.

Jedenfalls ist es meiner Meinung nach etwas zu viel Arbeit, aber ich denke, es entspricht am ehesten dem Standardansatz der Produktentwickler.Lassen Sie mich wissen, wenn Sie weitere Einzelheiten benötigen, und ich werde sehen, ob ich einen Schritt-für-Schritt-Blogbeitrag zusammenstellen kann, aber hoffentlich bringt Sie das auf den richtigen Weg.

Andere Tipps

Es würde mich wundern, wenn Sie in einer _Layouts-Datei etwas tun könnten, was in einer Formularvorlage nicht möglich ist.Ihnen stehen nahezu die gleichen Technologien zur Verfügung.

Wenn ich mir anschaue, wie SharePoint mit ListItems- und Layouts-Seiten arbeitet (z. B. „Berechtigungen verwalten“ für ein Listenelement), kann ich erkennen, dass einige Variablen über Abfragezeichenfolgen übergeben werden:?obj={76113B3A-FABA-4389-BC85-4BB2CC5AB423},6,LISTITEM&List={76113B3A-FABA-4389-BC85-4BB2CC5AB423}

Vielleicht greifen sie den Kontext jedes Mal programmgesteuert mithilfe dieser Werte zurück.

Ich verwende kein benutzerdefiniertes „neues Formular“, daher trifft dies möglicherweise nicht zu.Ich habe meinem benutzerdefinierten Inhaltstyp einen Ereignisempfänger hinzugefügt und dann meinen benutzerdefinierten Code in den Ereignissen ItemAdded oder ItemAdding ausgeführt.Dieser Code wird ausgelöst, wenn das Ereignis einer Liste hinzugefügt wird.Sie können die Eigenschaften des Ereignisempfängers verwenden, um zur übergeordneten Liste, Web und Site zu gelangen.

Ich möchte mein Problem hier als „besonders“ betrachten, da ich ein benutzerdefiniertes Formular verwende.Ich habe mich für die Verwendung eines benutzerdefinierten Formulars anstelle einer benutzerdefinierten FormTemplate entschieden, einfach weil ich viele Dinge mache, die nicht sehr SharePoint-listenartig sind (Ajax-Aufrufe durchführen, um Informationen von einer Drittanbieter-App abzurufen und dann einige dynamische Formularelemente basierend darauf zu generieren dieses Ajax-Ergebnisses, anschließende Verarbeitung dieser Daten beim Postback).Ich dachte, es wäre ein Albtraum, dies mit dem üblichen Mechanismus für benutzerdefinierte Rendering-Vorlagen zu versuchen.

Ich glaube auch nicht, dass ich die benutzerdefinierten Formulardeklarationen in der Listendefinition selbst bereitstellen kann, da dieser Liste mehrere Inhaltstypen zugeordnet sind und jeder Inhaltstyp sein eigenes benutzerdefiniertes Formular hat (der andere Typ ist zum Glück viel einfacher).

Tatsächlich war meine einfache Methode, die Listenführung in meinem versteckten Feld zu belassen, eine Methode mit sehr geringen Auswirkungen, um dieses spezielle Problem anzugehen.Meine Hauptsorge besteht darin, dass ich nicht sicher bin, warum der SPContext einfach seinen gesamten Nutzen verliert, wenn ich hierher zurückmelde, was mich denken lässt, dass ich etwas falsch mache.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top