Frage

Ich möchte damit beginnen, dass mein Code funktioniert perfekt, das ist mehr ein „wie am besten, es zu tun“ Art von Frage.

So habe ich Code wie dies in meinem .aspx-Datei:

    function EditRelationship() {
        var projects=<%= GetProjectsForEditRelationship() %>;

        // fill in the projects list
        $('#erProjectsSelect').empty();
        for(var i in projects)
            $('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');

        var rels=<%= GetRelationshipsForEditRelationship() %>;

        // etc
    }

Auch hier ist es funktioniert gut. Das Problem ist, dass VS2008 irgendwie auf Code wie diese Drosseln, ist es den < Charakter in dem Tags unterstrichen (mit zugehörigen Warnungen), dann Code-Vervollständigung für den Rest des Javascript bereitzustellen verweigert. Es ist auch nicht mehr mein Dokument zu formatieren, die Verweigerung, Parsing-Fehler geben . Der letzte Teil ist mein schlimmstes Ärgernis.

Ich konnte einige davon in evals habe ich denke, aber es scheint sorta stumm, um zusätzliche Schichten und Laufzeit-Performance Treffer fügen Sie einfach VS den Mund zu halten, und es ist nicht immer eine Option (ich kann nicht die Spitze erinnern aus meiner Kopf, wo dies nicht möglich war, aber dass ich ein seltsames Konstrukt hatte).

Meine Frage ist also, Wie Sie am besten schreiben Dieser (wobei beste Mittel wenigsten VS Beschwerden)? Weder eval noch Ajax-Aufrufe passen diese imo.

War es hilfreich?

Lösung

Wenn Sie Ihr Ziel VS Beschwerden zu reduzieren, ist, und wenn Sie asp.net laufen 4 (unterstützt Static Client Ids), vielleicht eine Strategie wie die folgenden wäre besser?

  1. Erstellen Sie eine ASP: Hidden Kontrolle, setzen Sie seine ClientIDMode auf "Static"
  2. Weisen Sie den Wert von GetRelationshipsForEditRelationship () auf diesem Gebiet auf Seite Last
  3. In Ihrem Javascript, lesen Sie den Wert aus dem verborgenen Bereich statt, ich nehme an, Sie wissen, wie dies zu tun.

Es ist mehr Arbeit, als Sie Ihre Lösung, und Sie werden einige Daten an den Postback hinzufügen (wenn Sie ausführen), aber es wird nicht dazu führen irgendwelche VS Beschwerden Ich denke:)

Andere Tipps

Sie können tun dies von Ihrer Seite in der Code-Behind

ClientScript.RegisterArrayDeclaration("projects", "1, 2, 3, 4");

oder zu konstruieren, so etwas wie JSON man kann es schreiben

ClientScript.RegisterClientScriptBlock(GetType(), "JSONDeclarations", "your json stuff");

UPDATE Basierend auf meinen Kommentar

<script id="declaration" type="text/javascript">
    var projects=<%= GetProjectsForEditRelationship() %>;
    var rels=<%= GetRelationshipsForEditRelationship() %>;
</script>
<script type="text/javascript">
    function EditRelationship() {
        // fill in the projects list
        $('#erProjectsSelect').empty();
        for(var i in projects)
            $('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
}
</script>

Ich habe nicht VS2008 Test installiert mit, so nehmen diese mit einem Körnchen Salz, aber haben Sie so etwas wie dies versucht?

var projects = (<%= GetProjectsForEditRelationship() %>);

So etwas könnte den JavaScript-Parser in ignorieren den Inhalt des Ausdrucks Trick.

Für das, was es wert ist, VS2010 richtig Parsen und Highlights Ihrer ursprünglichen Code-Schnipsel.

Ist es eine Option, dies zu VS2010 bewegen? Ich habe gerade kopiert und den Code und die IDE interpretiert es richtig.

Die beste Lösung ist in einer separaten Datei setzen Javascript und dies völlig zu vermeiden. Für diese spezielle Funktion, tun Sie serverseitige Arbeit. Warum nicht die Liste der Optionen bauen, dass Sie dynamisch in Code-Behind hinzufügen möchten, setzen Sie sie in einem versteckten div und dann nur noch jQuery fügen Sie aus dem bereits gerenderte HTML?

Wenn Sie eine Situation, wo Sie wirklich wollen, eine Menge dynamisch erstellen, um diese Art und Weise Javascript, betrachten Script in Code-Behind mit den Variablen einrichten Sie als Skripte benötigen und registrieren sie, dann Inline-Skript nicht müssen entkommen

ScriptManager.RegisterClientScript("projects = " + GetProductsForEditRelationship());

(im Wesentlichen, das heißt nicht die vollständige Syntax, die kontextabhängig ist). Dann finden Sie unter „Projekte“ in Ihrer Funktion.

(edit)

Ein wenig sauberer Weg, dies in einem größeren Maßstab zu tun, richten Sie alles, was Sie so brauchen in Code-Behind:

string script = "var servervars = {" +
  "GetProductsForEditRelationship: " + GetProductsForEditRelationship() + 
  "GetRelationshipsForEditRelationship: " + GetRelationshipsForEditRelationship() +
"}"

und beziehen sich auf alles wie:

servervars.GetProductsForEditRelationship

Wenn Sie diese viel zu tun, natürlich können Sie eine Klasse erstellen, die den Aufbau des Skripts zu automatisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top