webForumDet fria alternativet

Fast namn på kontroller

.NET

9 svar · 623 visningar · startad av haagel

Medlem sedan feb. 2006134 inlägg
Frågan#1

Jag har en textbox på min sida som jag behöver ha ett fast namn på när dess html genererats i sidan som skickas till besökaren.

Man kan ju ange ett id för kontrollen och detta har jag satt till "tbNewsText". Men om man kollar källan när sidan skickats till besökaren så är ju inte namnet detsamma. När jag kollade hade namnet ändrats till "ctl00$contentPlaceHolder$tbNewsText".

Jag måste ha ett fast namn då jag sedan ska jobba med kontrollen (eller snarare html-elementet) med JavaScript. Kan jag ange att ASP.NET inte får ändra namnet?

Om inte, kommer det namnet som genereras alltid att vara detsamma?

Medlem sedan okt. 20041 556 inlägg
#2

Vill du ha ut kontrollens klient-id så kan du få det med: KontrollIdt.ClientID
Så kan du skicka det till din javascriptfuntion.

...kommer det namnet som genereras alltid att vara detsamma?

Ja, såvida du använder det hela på ett annat sätt.
Det är lite dumt om du vill återanvända din application i ett annat sammanhang.

Medlem sedan feb. 2006134 inlägg
#3

Tack Travoni! :)

Men hur skickar jag nu detta namn till mitt JavaScript?

Medlem sedan dec. 19996 721 inlägg
#4

Hur är ditt Javascript "inlänkat"?

Medlem sedan juni 20003 076 inlägg
#5

Precis som travoni skriver. :)
Ex.

onclick="someJavascriptFunction('" + tbNewsText.ClientID +"');"
Medlem sedan feb. 2006134 inlägg
#6

Mja...

Det jag ska göra är att jag ska använda TinyMCE på en sida där man kan skriva in nyheter. (TinyMCE är ett JavaScript som "gör om" textfält till WYSIWYG-editorer). Sidan innehåller flera textfält och jag måste därför ange ID't på det textfält som jag vill ska visas som en editor.

Själva JavaScriptet ligger i separata filer som jag inte behöver röra i. Det jag lägger till i min webbsida är:

<script language="javascript" type="text/javascript">
    tinyMCE.init({
        mode : "exact",
        elements: "ctl00_contentPlaceHolder_tbNewsText",
        theme : "simple"
    });
</script>

I ovanstående exempel skriver jag in det namnet som mitt textfält får hos klienten, men här vill jag alltså istället kunna ange det som kommer ur "KontrollIdt.ClientID".

Hade jag pillat i PHP hade jag ju bara kunnat skriva ut detta manuellt, men jag vet inte hur man gör motsvarande i ASP.NET. Den här koden står ju i .aspx-filen.

Medlem sedan sep. 20011 914 inlägg
#7

Använd editor_selector i tinyMCE.init & cssclass på de webcontroller som skall vara en editor.

<script language="javascript" type="text/javascript">
tinyMCE.init({
	...
	mode : "textareas",
	theme : "advanced",
	editor_selector : "mceEditor",
	... 
});
</script>

<asp:textbox id="tbContent" textmode="multiLine" cssclass="mceEditor" rows="20" columns="90" runat="server" />
Medlem sedan feb. 2006134 inlägg
#8

Tack Dino! Inte svar på min fråga men väl en lösning på mitt problem! :)

Medlem sedan sep. 200278 inlägg
#9

Man kan lösa det relativt enkelt...

Du kan antingen

<script language="javascript" type="text/javascript">
    tinyMCE.init({
        mode : "exact",
        elements: "<asp:literal runat="server" id="editorClientID" />,
        theme : "simple"
    });
</script>

och i din .cs/.vb-fil (codebehind) sätta

editorClientID.Text = [Kontroll].ClientID

Eller
..

elements: "<%= [Kontroll].ClientID %>",
Medlem sedan dec. 19996 522 inlägg
#10

Skapa en identifier i ditt javascript, javascript som du sedan registrerar till sidan icodebehind, i page_load, där du skriver du över din identifier med kontrollens klient-id.

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)