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.




ValueChanged Event der FormFields

Unbeantwortet Dieser Beitrag hat 9 Antworten

Ohne Rang
242 Beiträge
Peter Oswald erstellt 29 Nov. 2012 09:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

wann genau werden eigentlich die ValueChanged Events der FormFields gefeuert?

Ich beobachte gerade das Phänomen, dass in meinem UserControl bei Nachschlagefeldern oder Auswahlboxen / DropDowns nach der Auswahl bzw. nach dem Ändern des Wertes kein ValueChanged eintritt.

Vermute mal, dass das Änderungsereignis auch nur dann eintreten kann, wenn ein Postback-Event vom Server erhalten wird. Richtig?

Wie auch immer; mir stellt sich die Frage, wie kann man in einem UserControl, sprich eigenes VisualWebpart, erreichen, dass man auf Benutzereingaben, die in einem Control gemacht werden, zuverlässig und sofort reagieren kann

(Hintergrund der Sache ist, dass ich in einem UserControl nach der Auswahl eines bestimmten Wertes eine manuelle Validierung der Eingabe durchführen möchte.)

Alle Antworten

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 29 Nov. 2012 10:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, vielleicht wäre folgendes eine Lösung:

<script type="text/javascript"> 
function getField(fieldID) 
{ 
    var docTags = document.all;
    for (var i=0; i < docTags.length; i++) {
        if (docTags[i].title == fieldID) { 
            return docTags[i] 
        } 
    } 
} 

function DisplayMessage()
{
    if (getField('My Gender').value == 'Male') {
     alert('Hello Manhood');
     }
}

getField('My Gender').onchange = function() {DisplayMessage()};

</script>

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 29 Nov. 2012 11:18
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hmh, ja und nein, diese Lösung habe ich schon ein paar Mal im Netz ausgegraben und auch schon ausprobiert. Was mir hier nicht gefällt ist zum einen, dass es javascript ist (als c#-entwickler ist man darüber nicht unbedingt erfreut) und zum anderen, dass das Skript unter Umständen null-pointer-exceptions wirft, wenn der Aufruf von getField vor dem Page_Load ausgeführt wird und zu diesem Zeitpunkt meine UserControls noch nicht initialisiert sind.

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 29 Nov. 2012 11:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Und was spricht gegen ein Updatepanel und einen registrierten Event auf dem Control? Hab zwar keine Möglichkeit es jetzt zu testen, aber zumindest bei den Applicationpages klappt das soweit ganz gut.

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
242 Beiträge
Peter Oswald Als Antwort am 29 Nov. 2012 14:21
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

gegen ein Updatepanel spricht nichts, allerdings ist nicht klar, worin es einen Unterschied macht, ob ich einen ValueChanged von dem Control auffangen will oder den Changed-Event vom UpdatePanel, das auf dem Control liegt. Das müsste doch eigentlich gleichermaßen gefeuert werden oder nicht? Falls nein, wie müsste ich da den UpdatePanel einsetzen? Ich lese vieles über mit oder ohne ContentTemplate und mit oder ohne ScriptManager..- da sind wieder viele Dinge dabei, die mich verwirren  :-/   !?

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 29 Nov. 2012 21:24
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hier stand leider nix hiffreiches - konnte es jetzt austesten und ich befürchte ohne JS wird das nix. Du hast Recht, der Event löst erst nach einem Postback aus (habs leider zu spät in der MSDN gesehen) .... sorry.

Aber vielleicht hat ja noch ein anderer User ne Idee oder sogar Lösung, würde mich jetzt auch stark interessieren.

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 30 Nov. 2012 08:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich habe das Problem so gelöst, dass ich einfach an dem Control Autopostback = true setze und dann das Event handle. Die Code Teile, die im Postback nicht ausgeführt werden sollen musst du dann nur mit einem if(!IsPostBack) abprüfen und damit sollte es glaube ich problemlos klappen.

Auf diese weiße setze ich die Werte in einem DropDownList Control neu je nachdem was in einer anderen DropDownList ausgewählt wurde.

Hoffe das hilft die weiter :)

Edit: Hier noch bisschen Code dazu, der helfen könnte:

DropDownList ddlCountry = yourControl
ddlCountry.AutoPostBack = true;
ddlCountry.SelectedIndexChanged += new EventHandler(ddlCountry_SelectedIndexChanged);
void ddlCountry_SelectedIndexChanged(object sender, EventArgs e)
{
}

Ohne Rang
96 Beiträge
Stefan Walter Als Antwort am 30 Nov. 2012 08:51
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

@Markus: ohne dem Threaderöffner vorgreifen zu wolle: auf FormFields gibts das Autopostback Attribut leider nicht.

www.stefan-walter.net
SharePoint MCITP, MCPD, MCTS, MOS

 

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 30 Nov. 2012 08:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ähm ok dann habe ich wohl etwas falsch verstanden.

Was ist denn mit FormFields gemeint? ICh dachte er meint ganz normale Controls in einem Formular?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 30 Nov. 2012 09:17
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Markus Sallmutter"]Was ist denn mit FormFields gemeint?[/quote]

Das sind die serverseitigen Controls, aus denen ein SharePoint Listenformular aufgebaut ist. Sie entstammen dem Namespace Microsoft.SharePoint.WebControls und sind alle von BaseFieldControl abgeleitet. Diese Controls abstrahieren die ganze Formularlogik, weil es für den Entwickler ziemlich egal ist, um welchen Feldtyp es sich handelt. Es wird immer korrekt dargestellt, egal ob es nur eine einfache Textbox ist oder das relativ komplexe Datumscontrol.

Eine Lösung für das ursprüngliche Problem kenne ich auch nicht. Ich habe mich bisher immer mit der Validierung z.B. beim Klick auf einen OK oder Speichern-Button begnügt.

Viele Grüße
Andi
af @ evocom de
Blog