Denken Sie nicht an diese schmerzhafte Lösung, aber scrollen Sie nach unten, um zu sehen, bearbeiten.
Uhh, ich habe einen Workaround gefunden. Aber Warnung! Wenn Sie keine Sharepoint-Objekte verwenden müssen, um dynamisch auf Werte zuzugreifen, ist dieser Beitrag nicht für Sie gedacht. Stattdessen möchten Sie einige der referenzierten Artikel lesen.
Um also einige Felder in einer NewForm.aspx mit Werten aus einer anderen Liste vorzufüllen, gehen Sie folgendermaßen vor.
Kurz:
Machen Sie Ihre benutzerdefinierte Liste Artikelformular. Tun Sie es step-by-step.
eine Klasse machen, die Microsoft.SharePoint.WebPartPages.WebPartPage
Inherit diese Klasse auf Ihrer benutzerdefinierten Form aspx <% @ Page von erbt. Mine sieht wie folgt aus: Inherits="xx.MeetingWorkspace.Tasks_NewFormxx, xx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
In protected override void OnInit(EventArgs e)
Funktion Gebrauch FindControlRecursively ein Content Objekt mit der ID "PlaceHolderMain" zu finden (Call dass Funktion auf this.Controls [0], nicht auf dieses Objekt).
Stellen Sie HtmlHiddenField
Objekte her, weisen Sie Werte zu und fügen Sie das Attribut "Title" mit der Methode HtmlHiddenField.Attributes.Add()
hinzu. Sie werden das für Schritt 7 benötigen.
Fügen Sie dem ContentPlaceHolder versteckte Felder hinzu, die Sie vorher haben.
Verwenden Javascript (lesen here oder here) zu füllen Sie Ihre gewünschten Felder aus versteckten Feldwerte auf diese Felder die Benutzer sieht.
P.S. Ich bin Anfänger am Sharepoint, also benutze diese Schritte besser mit cauntion. Ich würde froh sein, eine Antwort zu finden, wo Sie Ihre Felder im Code verweisen können, also muss ich Javascript-Zeug nicht verwenden.
Meine Reise in lange: Wie ich bereits erwähnt habe ich meine eigene öffentliche Klasse für dieses Formular geerbt. Mit dieser Technik sollte es möglich sein, auf ein vorhandenes Formularfeld zu verweisen, indem diese Klassensteuerelemente mit einem Variablennamen wie der Formular-ID deklariert werden. Im Screenshot habe ich ein TextBox
Klasse-Objekt mit ID ctl00_PlaceHolderMain_g_77625 .... usw.
nun in meiner Klasse I mit dem gleichen Namen wie ID macht eine Variable versucht, aber es nicht initialisiert werden und der Wert null . Ich dachte, vielleicht wird ID geändert, ich habe überprüft, aber nein, es bleibt so wie es vorher war.
So versuchte ich mit Control.FindControl, aber es rekursiv nicht suchen, so fand ich diesen Artikel: Recursive Page.FindControl. (Sie würden wahrscheinlich einige Kommentare lesen wollen, da es bessere Implementierungen mit Generika gibt). Wichtig: Lesen Sie den Kommentar "Sam am 2. August 2008 4:13", bevor Sie die FindControlRecursive-Methode verwenden.
Also, mit der Funktion in der Hand, übergab ich die ID als Argument - immer noch kein Glück, es gibt nur null für mich zurück. Glücklicherweise konnte ich PlaceHolderMain als ID übergeben und es würde mir das Hauptplatzhalterobjekt zurückgeben.
Also die Problemumgehung wäre dann auf die überschriebene Methode OnInit(EventArgs)
machen HtmlHiddenField Objekte, setzen Sie ihre Werte auf was auch immer Sie wollen und diese versteckten Felder zu PlaceHolderMain hinzufügen. (ContentPlaceHolder.Controls.Add()
)
Dann mit etwas Javascript ASPX Seite war ich in der Lage Werte von den ausgeblendeten Feldern meiner preffered Felder zu laden (gut fand ich einen Weg, um die Felder, die ich mit Javascript Zwei nützliche Artikel für diese wollen verweisen. shorter one und longer one)
Edit: Weniger schmerzhafte Lösung
Ohh, froh, dass ich fand diese. Mit jPoint (jQuery für SharePoint) und dann mit einigen Skript können Sie Querystring-Parameter zum Auffüllen von Listenfeldern verwenden.
<script type="text/javascript" src="//sharejpoint.googlecode.com/files/jPointLoader-0.6-expanded.js" ></script>
<script>
$(document).ready(function() {
jP.Form.readForm();
$.each(jP.Form.Items, function (idx, item) {
if(querySt(item.Name) != null && querySt(item.Name) != "undefined")
jP.Form[item.Name].val(unescape(querySt(item.Name)));
});
});
//Gets value of querystring key
function querySt(ji)
{
hu = window.location.search.substring(1);
gy = hu.split("&");
for (i=0;i<gy.length;i++)
{
ft = gy[i].split("=");
if (ft[0].toUpperCase() == ji.toUpperCase()) //Fixed query so it is case insensitive
{
return ft[1];
}
}
}
</script>
Dieses Skript kann in Kommentaren in this Artikel gefunden werden.