2011-01-10 18 views
3

Ich rufe eine JavaScript-Funktion von CS-Datei, die als unten:Pass Variablen JavaScript-Methode von Code hinter

private string CallValuesScript() 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.AppendLine("$(document).ready(function() {"); 
    sb.AppendLine("DisplayValues();"); 
    sb.AppendLine(" });"); 
    return sb.ToString(); 
} 

Ich habe zwei ganze Zahlen auf Klassenebene deklariert private int ratingLinkId = 0; private int ratingValue = 0;

Bitte lassen Sie mich wissen, wie ich diese beiden ganzzahligen Werte an die Funktion "DisplayValues ​​();" ?

Ich habe die JavaScript-Funktion ist aspx wie folgt:

function DisplayRatings(id, count) { 
//code 
} 

Dank

+0

Sie sollten richtige Web-Entwicklung vor dem Sprung zu den "Abkürzungen" lernen dot.net bietet –

+1

Ich denke, ein besserer Kommentar wäre, könnten Sie erklären, warum Sie es auf diese Weise tun nicht nicht nur in die Aspx-Seite setzen ? – Steve

Antwort

1

Gebäude werden Sie

sb.AppendLine("DisplayValues(" + ratingLinkId + "," + ratingValue + ");"); 
1

Sie können serverseitigen Variablen auf Client-Seite übergeben, indem sie an den Methodenaufruf in Ihrem Skript Helfer anhängt.

sb.AppendLine("DisplayValues(" + ratingLinkId.ToString() + ", " + ratingValue.ToString() + ");") 
0

Eine Methode wäre, versteckte Felder im aspx zu haben, die die Werte enthalten. Das würde nur funktionieren, wenn sich die Variablen nicht ändern, seit die Seite geladen ist.

Eine andere Sache, die Sie tun können, ist eine Seitenmethode mit dem WebMethod/ScriptMethod-Attribut und nennen Sie es als ein Web-Service-Aufruf von der Javascript.

Eine andere Methode, die Variablen in der JavaScript-Funktion zu übergeben wäre, wenn Sie die JavaScript-String

0

@San verwenden können, bin ich mit Wraith. Irgendwo in Ihrem Initialisierungscode (aspx page markup, page_load, etc ..) erstellen Sie versteckte Felder und setzen Sie ihre Werte auf die gewünschten ganzen Zahlen. Nachdem Sie dies getan haben, müssen Sie nicht mehr Ihre js mit Code hinter sich erstellen.

Hier ist ein sehr einfaches Beispiel, ich habe die Hiddenfields mit Literalen festgelegt. Sie könnten die Werte auch einfach aufheben und sie in einen Initialisierungscode auf Ihrer .cs-Seite setzen.

diese Zeilen zu Ihrer ASPX-Seite hinzufügen

<asp:HiddenField runat="server" id="hdnfldarg1" Value="1" />
<asp:HiddenField runat="server" id="hdnfldarg2" Value="2" />

jetzt Ihre js Code der folgenden ändern. Angenommen, Sie verwenden eine neuere Version von asp.net Microsoft hat eine spezielle js-Funktion $ get, $ finden, die ASP.net-ID zu clientid übersetzen.

$(document).ready(function() { 
var arg1 = $get('<% hdnfldarg1 %>'); 
var arg2 = $get('<% hdnfldarg2 %>'); 
DisplayValues(arg1,arg2);") 
});" 

Natürlich ist dies ungeprüfter Code. Sie könnten einen beliebigen Page_load/init-Code hinzufügen, um die genauen Werte der zwei ausgeblendeten Felder festzulegen. Ich bin mir nicht sicher, ob das überhaupt funktioniert, wenn Sie versuchen, eine separate js-Datei

1

zu verwenden. Sie möchten vermeiden, JavaScript in Codebehind zu generieren. Ich persönlich mag auch keine eingebetteten Codeblöcke in meinem Javascript. Darüber hinaus würde die Verwendung ausgeblendeter Felder in Ihrem HTML dazu führen, dass diese Werte bei der Übermittlung per Formular übermittelt werden.

Meine Lösung ist eine private interne Klasse in der Code-Behind mit Eigenschaften für alle Werte erstellen Sie in JavaScript benötigen:

class JSValues { 
    public int id { get; set; } 
    public int count { get; set; } 
} 

In Code-Behind, serialisiert werden diese in JSON:

string json = new JavaScriptSerializer().Serialize(new JSValues() { 
    id = 0, 
    count = 0 // or whatever you want to assign them 
}); 

ClientScript.RegisterClientScript(
    this.GetType(), 
    "codeBehindToJS", 
    "var fromCodeBehind = " + json + ";"); 

DisplayValues(fromCodeBehind.id, fromCodeBehind.count); 

EDIT:

schließlich in Javascript, können diese Werte zugegriffen werden Som Die Korrekturen, auch wenn es etwas spät zur Party ist.

1

Die Lösung $ get mit nicht für mich arbeiten ....

Aber hier ist eine einfache Möglichkeit, es zu tun, ohne ein verstecktes Feld zu verwenden.

In Ihrem Code hinter definieren Sie Ihre Variable:

Protected maxPhotos As String 

Dann auf Ihrer aspx Seite in Ihrem Javascript einfach es wie so greifen:

var maxPhotos = 0 + "<%=maxPhotos%>"; 

habe ich die "0+" denn ich wollte Umwandlung von String in Nummer erzwingen.