none
Javascript aus den Ressoucen laden RRS feed

  • Frage

  • Ich will in meine Seite Facebook und Twitter Buttons einbauen. Es ist
    kein Problem den Scriptcode statisch in den Markup Code einzubauen. Ich
    hätte aber an der entsprechenden Stelle gerne verschiedene
    Sprachversionen, die ich aus den Ressourcen laden wollte. Mit welchem
    Steuerelement lässt sich das machen?
     
    TIA,
    Hajü
     
    Mittwoch, 19. Dezember 2012 16:05

Antworten

  • Zu später Stunde hab ich's noch rausgekriegt. Es geht ganz einfach mit einem Substitution Control. Im Markup Code (Die Seite heißt bei mir Download.aspx) :

    <asp:Substitution ID="twitterSubstitution" runat="server" MethodName="ShowTwitterButtons" />

    In Download.aspx.cs :

    protected static string ShowTwitterButtons(HttpContext context)
    {
        CultureInfo ci = new CultureInfo((string)context.Session["CurrentCulture"]);
        String vPath = "~/Download.aspx";
        return  HttpContext.GetLocalResourceObject(vPath, "twitterScript", ci).ToString();
    }

    In Session["CurrentCulture"] ist meine aktuelle Locale gespeichrt. Das war's

    Hajü



    • Als Antwort markiert Hans-J. Ude Donnerstag, 20. Dezember 2012 00:25
    Donnerstag, 20. Dezember 2012 00:25

Alle Antworten

  • Hi,

    bin mir nicht ganz sicher ob ich dich richtig verstanden habe, aber du willst z.B. Javascript Dateien und CSS Dateien in deine Assembly einbetten und bei einem Browser-Request soll der Webserver die Dateien aus der Assembly zurückgeben, dann ggf. noch unterschieden nach Sprache des Clients, so dass einmal facebook.de.js und einmal facebook.en.js zurückgegeben wird?

    Dafür würde ich die JS Dateien in die Assembly einbetten und dann einen Handler schreiben, der bei jedem Request durchlaufen wird und auf einen bestimmten Request (z.B. /facebook.js) reagiert und die passende Datei aus dem Assembly holt und zurück gibt. Sollte möglich sein denke ich...

    Gruß
    asymetrixs

    Mittwoch, 19. Dezember 2012 20:21
  • Am 19.12.2012 21:21, schrieb asymetrixs:
    > bin mir nicht ganz sicher ob ich dich richtig verstanden habe, aber du
    > willst z.B. Javascript Dateien und CSS Dateien in deine Assembly
    > einbetten und bei einem Browser-Request soll der Webserver die Dateien
    > aus der Assembly zurückgeben, dann ggf. noch unterschieden nach Sprache
    > des Clients, so dass einmal facebook.de.js und einmal facebook.en.js
    > zurückgegeben wird?
     
    Prinzipiell ja, aber kein CSS. Meine Seite unterstützt derzeit deutsch
    und englisch. In der Masterpage habe ich noch einen Dropdown zum
    manuellen Umschalten. Als default nehme ich Request.UserLanguages[0].
    Danach wird diese oder jene Ressourcenversion geladen, das klappt sehr
    gut. Wenn ich jetzt noch den Scriptcode da mit rein packen könnte, wär's
    ideal.
     
    > Dafür würde ich die JS Dateien in die Assembly einbetten und dann einen
    > Handler schreiben, der bei jedem Request durchlaufen wird und auf einen
    > bestimmten Request (z.B. /facebook.js) reagiert und die passende Datei
    > aus dem Assembly holt und zurück gibt. Sollte möglich sein denke ich...
     
    Das klingt erstmal kompliziert, wie soll ich das implementieren? Ich
    wollte auch vermeiden noch etliche Dateien mit zu schleppen. Die *.resex
    Dateien sind sowieso schon da.
     
    Hajü
     
     
    Mittwoch, 19. Dezember 2012 20:50
  • Ich denke du brauchst eher sowas:

    http://msdn.microsoft.com/de-de/library/ms227675(v=vs.80).aspx

    Unten findest du weiterführende Link, u.a. einen hier hin

    http://msdn.microsoft.com/de-de/library/ms228090(v=vs.80).aspx

    Dort ist bereits ein Beispiel wo Text mit Response.Write zurueckgegeben wird. Du müsstest an dieser Stelle dann den Inhalt deiner gewüschten JS Datei zurückgeben.

    In VisualStudio gibst du denen JS Dateien einen einfachen Namen, z.b. facebook.de.js, facebook.en.js und sagst dann in den Dateieigenschaften, dass die als eingebette Ressource gebaut werden sollen.

    Dann kannst du über den Namespace und den Dateinamen auf den Inhalt der Datei zugreifen, z.B. so

    using (System.IO.Stream file = assemblyDB.GetManifestResourceStream("Namespace.facebook." + Request.UserLanguages[0]+ ".js"))
    using (System.IO.StreamReader sr = new System.IO.StreamReader(file))
    {
        string jsDateiInhalt = sr.ReadToEnd();
        ....
    }
    }

    "NameSpace" ergibt sich aus deinem Assemblynamen und ggf. Unterordnern in denen die Dateien liegen. In "jsDateiInhalt" ist nacher dann dein Inhalt der entsprechenden JavascriptDatei drin

    Um an deine Assembly zu kommen:

    System.Reflection.Assembly assemblyDB = System.Reflection.Assembly.GetExecutingAssembly();

    • Bearbeitet asymetrixs Mittwoch, 19. Dezember 2012 21:05 assemblyDB Nachtrag
    Mittwoch, 19. Dezember 2012 21:04
  • Zu später Stunde hab ich's noch rausgekriegt. Es geht ganz einfach mit einem Substitution Control. Im Markup Code (Die Seite heißt bei mir Download.aspx) :

    <asp:Substitution ID="twitterSubstitution" runat="server" MethodName="ShowTwitterButtons" />

    In Download.aspx.cs :

    protected static string ShowTwitterButtons(HttpContext context)
    {
        CultureInfo ci = new CultureInfo((string)context.Session["CurrentCulture"]);
        String vPath = "~/Download.aspx";
        return  HttpContext.GetLocalResourceObject(vPath, "twitterScript", ci).ToString();
    }

    In Session["CurrentCulture"] ist meine aktuelle Locale gespeichrt. Das war's

    Hajü



    • Als Antwort markiert Hans-J. Ude Donnerstag, 20. Dezember 2012 00:25
    Donnerstag, 20. Dezember 2012 00:25