Avatar billede CodingJoe Nybegynder
01. oktober 2010 - 20:21 Der er 17 kommentarer og
1 løsning

Inject resource file tekst i javascript kode

Jeg har behov for at smide en tekst i noget JQuery / Javascript kode. Det drejer sig reelt om teksten på en knap, der defineres i noget script kode i markup filen.

Jeg har ingen problemer andre steder i markup filen, hvor formatet er:
<asp:Literal ID="litExample" runat="server" Text="<%$Resources: My.Default.Resource, min_tekst %>"></asp:Literal>

Jeg har dog problemer i mit javascript kode på siden. Hvordan kan jeg komme udenom problemet uden at det bliver et grimt hack.

Mit JQuery / Javascript kode:
<script type="text/javascript">
$(document).ready(function() {
  buttons: {
    'her_skal_min_tekst_streng_ind': function() {
    ...
    ...
    ...
  }
}

Hvad gør jeg? Jeg er åbent for fix i min codebehind fil...
Avatar billede jokkejensen Novice
01. oktober 2010 - 21:33 #1
'her_skal_min_tekst_streng_ind': function() {

til

'="<%=Resources: My.Default.Resource, min_tekst %>': function() {

eller

<%#Resources: My.Default.Resource, min_tekst %>

Men så skal du kaste en page.databind, i din page load.


Sidste mulighed:
<div id="text" style="display:none">
<asp:Literal ID="litExample" runat="server" Text="<%$Resources: My.Default.Resource, min_tekst %>"></asp:Literal>
</div>

'her_skal_min_tekst_streng_ind': function() {

til

jQuery("#text").text(): function() {

ok ?

vh
Avatar billede CodingJoe Nybegynder
01. oktober 2010 - 21:45 #2
De to første forslag virker ikke...strengen er ikke lukket i den første...den anden giver også en kompileringsfejl...
Avatar billede CodingJoe Nybegynder
01. oktober 2010 - 22:33 #3
Det sidste forslag du har skrevet ind, har jeg faktisk tænkt på selv, men vurderede det som et hack. Jeg har har faktisk uden held også før forsøgt med <%=%> (Response.write) notationen før uden held...
Avatar billede jokkejensen Novice
01. oktober 2010 - 23:37 #4
Så luk stengen i den første ?

nr 2, husker du at køre en page.databind ? <%# bruges ofte i webcontrols, men kræver at man databinder controllen.

Jeg har aldrig set <%$ blive brugt før, men hvis det virker fint i den literal kan du tage "hack" eksemplet.

Ellers prøv
psuedo:
protected string test;

.cs
page_load()
{
test = "weeeee";
}
.aspx
<js>
alert('<%= test %>');
</js>
Avatar billede jokkejensen Novice
01. oktober 2010 - 23:45 #5
og ellers kan du bare:

Literal.text ="var s = '"+ Resources: My.Default.Resource, min_tekst +"';";

og placere din literal i dit andet script, så er s i scopet, og du kan noget ala:

<script type="text/javascript">
$(document).ready(function() {
  <asp:Literal ID="Literal" runat="server"></asp:Literal>
  buttons: {
  s: function() {

Og beklager hvis du skulle føle dig stødt, men hvorlænge har du arbejdet med asp.net ?

Af hvad jeg lige kan lure af din egentlige problemstilling, så tror jeg du griber opgaven lidt forkert an.

Hvad er målet ?

vh

Vh
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 01:02 #6
Lukningen af strengen virkede ikke...og kommentaren var mere ment, som en hentydning til at forslaget ikke så ud til at være testet.

Jeg er desværre ikke interesseret i at lave et databind af nogen art, og vil ej lave en property i min klasse fil, som jeg vil hente data fra, eller en global værdi i det hele taget. Globale variabler er et stort no no, medmindre der er tale om konstanter (CONST).

'<asp:Literal ID="Literal" runat="server"></asp:Literal>' vil forcere et div tag midt i javascript koden. (tror ikke du har arbejdet med asp.net i så lang tid :) )
en <asp:Label> forcerer fx et span tag ind.

Jeg har arbejdet med asp.net i snart 7 år....vil ikke støde den anden vej heller, men det eneste fra dine forslag, der kan virke er at lave et hidden felt, hvori min værdi smides ind i, som jeg så fra JQuery / Javascript så kan hente værdien fra. Det synes jeg ikke er særligt elegant, og betegne som et hack. Derfor skrev jeg om hjælp her, for at finde ud af om, der var en speciel måde at gøre det på. Resten af eksemplerne kommer lidt ud af den blå luft (beklager, men de er skrevet ind her uden at være testet af dig).

Problemet for mig er blot at jeg ikke kan skrive min værdi ud imellem <script></script> tagget i min markup fil.

Alternativet er at jeg bare definerer et <asp:PlaceHolder> element i min markup fil, hvori jeg i codebehind filen konstruerer JQuery koden, og derfra slå op i min resource fil. Det kan måske blive den eneste løsning.

Målet med alt det her er at jeg vil have alle min formular felt tekster hentes fra en *.resx fil.
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 01:14 #7
Men udover alt det...så synes jeg spørgsmålet omkring, hvor længe jeg har arbejdet med asp.net, næsten fik mig til at falde ned af stolen af grin....

Alt ialt er min markup fil helt enkel og stilren som den skal være, og codebehind filen er ligeledes enkel, og har ikke andet overflødigt i sig.

Det irriterer bare at min knap er den eneste, der ikke har teksten fra min resx fil. Kun fordi jeg gør brug af JQuery UI, som sætter submit knappen op inde i JQuery koden.
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 01:19 #8
Har iøvrigt ingen datacontroller i min kode...så ingen databind() hos mig...
Avatar billede jokkejensen Novice
02. oktober 2010 - 01:26 #9
ok, men så burde du også vide at js bør serviceres gennem en http handler, hvor du rigt kan benytte benytte C# til at berige dit javascript, komprimere indhold, hente flere filer i et request og cache lortet.

inline javascript er hele taget noget skidt, og når du alligevel afvikler det $(document).ready(), så kan det ligeså godt ligge i en extern js fil.

og nej, jeg har ikke arbejdet med asp.net's rådne webcontrols i lang tid, ej heller haft brug for at at hente server variabler på den måde. Der findes meget mere elegante løsninger derude, selv microsofts egne webudviklere brugre andre metoder.

vh.
Avatar billede jokkejensen Novice
02. oktober 2010 - 01:28 #10
.... du misforstår begrebet DataBind, alle webcontrols har den egenskab:

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.aspx
Avatar billede jokkejensen Novice
02. oktober 2010 - 01:32 #11
og nej, jeg tester sjældent det jeg skriver herinde, og er selv ret overbevist om jeg kan få begge de første til at fungere. Men har jo ikke tid til at sidde og fedte med opæstning af miljø.
Avatar billede jokkejensen Novice
02. oktober 2010 - 01:44 #12
http://naspinski.net/post/inline-aspnet-tags-sorting-them-all-out-(3c25242c-3c253d2c-3c252c-3c252c-etc).aspx

Det burde bekræfte mine tidligere forslag

<%# kræver databind
<%= skulle virker ud af boksen
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 01:52 #13
Min ven min ven min ven...jeg har ikke brug for nogen HttpHandler af nogen art...jeg sidder i virkeligheden og arbejder med en UserControl (.ascx), og ville blot ikke forvirre indlægget med andet, så jeg holdte det til en aspx fil. Min usercontrol er pakket pænt ind, og alt det der skal til er inde den fil. Jeg er ikke enig med at in-line javascript er noget skidt, om det ligger udenfor eller indenfor spiller ingen rolle, for mig er det vigtigste at dokumentet er XHTML valid.

Igen jeg har ingen webcontroller, der har brug for databind.

Dine første indlæg gav bare ingen mening, udover det sidste med det hidden felt jeg før har omtalt.

At databinde mine Literals i codebehind filen er lidt hul i hovedet, når jeg kan nøjes med at skrive min res referencer i aspx (ascx filen). At gøre det i codebehind vil fx kræve et build, hver gang jeg skal rette noget.

Jeg finder ud af en løsning og paster den ind så snart, jeg har fundet den bedste måde.

Mht. til at sætte et miljø kræver det ikke så meget andet en Visual Studio. Oprette en resource fil med en tekst, bruge default.aspx filen skrive en linje markup, få værdien fra resx filen ud, og derefter prøve det samme i mellem <script></script> tagget i default.aspx siden.

Mange tak for tiden...du er ret skarp i xslt, men her skal der nok bruges mere tid ;)
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 01:59 #14
Det er ved at blive lidt komisk...
'<%=' virker desværre ikke med en resource fil reference...har prøvet flere gange.
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 02:51 #15
Her er løsningen:

Den gode gamle VBScript <%=%> (Response.Write) notationen skal bruge, det er såmænd syntaksen på resourcen, der skal skrives anderledes.

Formatet på den måde man tilgår resourcen sker på følgende måde:
'<%=Resources.My.Default.Resource.min_tekst%>' (VS Editoren vil dog ikke vise linjen som valid, men det skal ignoreres).

Det vil sige, der sker et response.write af:
Resources.My.Default.Resource.min_tekst værdien.

<%$Resources: My.Default.Resource, min_tekst %> notationen bruges i Label eller Literal asp web controls.
Fx:
<asp:Literal ID="litExample" runat="server" Text="<%$Resources: My.Default.Resource, min_tekst %>"></asp:Literal>
Avatar billede CodingJoe Nybegynder
02. oktober 2010 - 02:56 #16
Jeg fandt mine svar her, på hvordan man ellers kan referere til en værdi i en *.resx fil:
http://msdn.microsoft.com/en-us/magazine/cc163566.aspx
Avatar billede CodingJoe Nybegynder
02. december 2010 - 18:59 #17
.
Avatar billede CodingJoe Nybegynder
02. december 2010 - 18:59 #18
..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester