2009-08-13 6 views
2

Ich versuche Postbacks mit JavaScript-Client-Seite Verarbeitung zu ersetzen, wann immer ich in meinem Code asp.net c 3.5 kann, um die Benutzererfahrung zu verbessern. Ich benutze keine Javascript-Frameworks. Ich benutze vs2008.Wie verwende ich Javascript, um den Namen des UserControls abzurufen, von dem es aufgerufen wird?

Ich habe eine usercontrol .ascx-Datei mit einer Dropdown-Liste und Schaltfläche, die an drei Stellen auf meinem Hauptbildschirm verwendet wird.

Ich hatte ein Postback auf OnSelectedIndexChanged für die Dropdown-Liste getan.

Ich muss nicht jedes Mal Postback, also habe ich versucht, eine JavaScript-Funktion in der Benutzersteuerung, um das ausgewählte Element zu überprüfen und nur ein Postback, wenn es beginnt mit "-".

Der Name der Elemente, die ich in meiner JavaScript-Funktion erhalten muss, hängt jedoch vom Namen der usercontrol-Instanz ab, die ihn aufruft, und ich benötige diesen Namen zur Laufzeit, zum Beispiel: uc1_ddlLocations und uc1_ btnPostBack. Hier

ist der Code:

<script type="text/javascript" language="javascript"> 
function ddlChange(this) { 
var loc = $get("GetTheUserControlNameAndInsertHere_ddlLocations"); 
if (loc.value.substring(0,1)=='-') 
{ 
var btn = $get("GetTheUserControlNameAndInsertHere_btnPostBack "); 
btn.click(); 
} 
</script> 

Wie kann ich das tun? Kann jemand einen besseren Weg vorschlagen, um das zu tun, was ich versuche?

+0

Hat der Usercontrol selbst wissen, ob ein Postbacks notwendig ist? Könnte ein "nearsPostback" -Parameter an ddlChange() übergeben werden? – Mike

+0

Ich bin mir nicht sicher, ob ich Ihre Frage verstehe. Damit das Benutzersteuerelement herausfinden kann, ob es ein Postback benötigt, muss es ein Postback durchführen. –

+0

@Mike, @Lill: Die Funktion bestimmt, ob das Postback notwendig ist, nicht das ddl selbst. Die ddl wird entweder immer ein Postback ("AutoPostBack = True") oder nie ("AutoPostBack = false"). Er versucht, eine bedingte Logik zu niedrigeren Bandbreitenkosten einzufügen. – JustLoren

Antwort

1

Sie können den UserControl-Namen ermitteln, indem Sie ihn aus dem ddl-Namen analysieren. Bitte beachten Sie, dass ich nicht die Parsing-Logik debuggen haben, könnte es aus leicht sein :)

<script type="text/javascript" language="javascript"> 
    function ddlChange(ddl) 
    { 

    if (ddl.value.substring(0,1)=='-') 
    { 
     var prefixEndLoc = ddl.id.lastIndexOf("_"); 
     var prefix = ddl.id.subString(0,prefixEndLoc); 
     var btn = $get(prefix + "_btnPostBack "); 
     btn.click(); 
    } 
    } 
</script> 
+0

Fügen Sie einfach hinzu: 1. benötigen: dlLocations.Attributes.Add "OnChange", "javascript: locChange (this);"); in der Pageload-Code hinter dem Javascript parm (ddl), und übergeben 2. Ich habe eine else ddl.blur(); , um den Fokus vom ausgewählten Dropdown-Listenelement zu entfernen. Wäre für den Benutzer sonst verwirrend gewesen. Danke, JustLoren! –

0

die ClientID Verwendung von Sie es zu Ihrem Javascript steuern und geben

0

Sie die ClientID auf eine Javascript-Variable aus dem Code hinter einstellen.

Verwenden Sie diese Variable in Javascript Aufruf, um das Element zu erhalten.

Verwandte Themen