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.




Controls via JScript ansteuern

Geprüfte Antwort Dieser Beitrag hat 8 Antworten

Ohne Rang
255 Beiträge
stephan12345 erstellt 27 Sept. 2011 10:29
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo zusammen,

wenn ich in einem VisualWebpart eine DropDownList mit dem Namen "test_ddl" implementiere, dann erhält diese auf der gerenderten Webseite
vom SharePoint eine eigene ID:

<select name="ctl00$m$g_e7ca5014_1559_44f7_9eae_4a84800a5674$ctl00$test_ddl"
id="ctl00_m_g_e7ca5014_1559_44f7_9eae_4a84800a5674_ctl00_test_ddl" onChange="test()" style="width:104px;">

Ich habe jetzt eine JavaScript Methode auf meiner Seite:

function test() {       

         var ddl = document.getElementById("test_ddl");

         alert(ddl.selectedIndex);
     }


Diese kann jetzt natürlich nicht mehr auf das Element zugreifen, weil die ID jetzt nichtmehr mit der aus den Sourcen übereinstimmt.
Was ist den hier best Practice, um auf die Controls via JavaScript zugreifen zu können ?

Gruß
Stephan

 

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2011 10:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du mußt das JavaScript (oder zumindest eine Variable mit dem Control-Namen) dynamisch erzeugen und dabei die ClientID des Controls einsetzen. In der ClientID-Eigenschaft findest Du immer die ID, die ein Control tatsächlich bekommt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 27 Sept. 2011 10:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ja so habe ich das bisher auch immer gemacht.

Bei größeren Methoden ist das aber ganz schön umständlich so zu arbeiten ;-)

Ich dachte es gäbe da irgendeinen Trick, kann man nicht evtl. die ID des Controlls der Methode beim Aufruf im JScript mitübergeben, oder so etwas ?

Gruß
Stephan

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 27 Sept. 2011 10:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ansonsten ist der Trick mit der Variable auch nicht schlecht, dann braucht man nicht alles anpassen.

Danke und Gruß

Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 27 Sept. 2011 12:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Leider ist das Problem leider wieder einmal nicht so leicht zu lösen.

Eigentlich hätte ich die Variable ja im Page_Load setzen können:

 

 

 

 

string script = String.Format("<script> var controllID = '{0}'; </script>",test_dll.ClientID);

this.Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "MyKey", script);

In einer Sandboxed-Solution habe ich aber leider keinen Zurgiff auf this.Page.ClientScript oder auf ScriptManager.RegisterStartupScript.

Auf der Seite unten gibt es einen Workaround, den hab ich aber noch nicht getestet, da ich hoffe noch einen einfacheren Weg zu finden:

http://blogs.msdn.com/b/ketaanhs/archive/2011/06/23/page-class-sp-2010-sandbox-solution.aspx

Gruß

Stephan

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Sept. 2011 13:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das sehe ich jetzt nicht als das Problem an. Schreibe Dein Script einfach in ein LiteralControl. Du mußt dann aber aufpassen, wenn es mehrere Instanzen Deines Webparts auf einer Seite geben kann.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 28 Sept. 2011 13:40
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Andi,

ich habe jetzt eine noch einfachere Lösung gefunden, die direkt  im javaScript funktioniert.

Gruß
Stephan

var value = document.getElementById('<%=TextBox1.ClientID%>').value;

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 Sept. 2011 13:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das setzt aber voraus, daß Du eine aspx oder ascx hast. Und weil Du Dich doch immer mit der Sandbox rumärgerst, bin ich davon ausgegangen, daß es keine solche Datei gibt ;-)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
255 Beiträge
stephan12345 Als Antwort am 28 Sept. 2011 13:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hi Andi,

doch die gibt es (ascx), weil ich das Microsoft Template für VisualWebParts(sandboxed) benutze :-)

http://visualstudiogallery.msdn.microsoft.com/8e602a8c-6714-4549-9e95-f3700344b0d9

Gruß

Stephan