Benutzer mit den meisten Antworten
Javascript aus den Ressoucen laden

Frage
-
Ich will in meine Seite Facebook und Twitter Buttons einbauen. Es istkein Problem den Scriptcode statisch in den Markup Code einzubauen. Ichhätte aber an der entsprechenden Stelle gerne verschiedeneSprachversionen, die ich aus den Ressourcen laden wollte. Mit welchemSteuerelement lässt sich das machen?TIA,Hajü
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
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 -
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 deutschund englisch. In der Masterpage habe ich noch einen Dropdown zummanuellen Umschalten. Als default nehme ich Request.UserLanguages[0].Danach wird diese oder jene Ressourcenversion geladen, das klappt sehrgut. Wenn ich jetzt noch den Scriptcode da mit rein packen könnte, wär'sideal.> 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? Ichwollte auch vermeiden noch etliche Dateien mit zu schleppen. Die *.resexDateien sind sowieso schon da.Hajü
-
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
-
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