fanatic
(9.440 point. Point ude: 2.045)
Tilføj string i asp.net textbox
Hej eksperter.
Jeg har en asp.net textbox:
<asp:TextBox ID="tbxThreadMessage" runat="server" TextMode="MultiLine"></asp:TextBox>
Jeg vil gerne kunne tilføje noget tekst til denne textbox via nogle knapper neden under textbox'en.
Et eksempel kunne være en imageButton der forestiller en smiley. Når der trykkes herpå skal ":-)" tilføjes i textbox'en. Det fedeste ville jo være at det blev indsat der hvor curseren er i textbox'en, men at tilføje det i slutningen er også ok.
En løsning er at lytte på en click-event på en imageButton som her:
protected void ibSmiley_Click(object sender, ImageClickEventArgs e)
{
tbxThreadMessage.Text = tbxThreadMessage.Text + ":-)";
}
Men så sker de et page-refresh hvilket ikke er så fedt. Jeg har også prøvet med et ajax updatepanel og en trigger, der er forbundet til min imagebutton, men det virker ikke ordentligt. Når man skriver i feltet forsvinder fokus ind imellem.
Jeg tænker at jeg så skal ud i noget manuelt javascript, hvilket også ville være en ok løsning, men så kan jeg ikke arbejde med en asp.net textbox komponent vel? Så skal jeg vel bruge en html-textbox.
Hvem kan komme med den bedste løsning til mit problem?
Skrevet tor. d. 26. april 2007 kl. 19:38:29| #1
Det burde sådan set virke finte nok, hvis du har begge kontroller i et updatepanel, eller hvis du sætter din knap op som trigger.
Kan du vise et lille setup der illustrerer problemet?
Mvh
Skrevet tor. d. 26. april 2007 kl. 19:48:14| #2
Hej snepnet.
Men er ajax-måden mon nu også hensigtsmæssig, den står jo og sender frem og tilbage hele tiden? Men okay hvis vi skal se på hvordan jeg gør det vha ajax, så se herunder:
<asp:UpdatePanel id="UpdatePanel1" runat="server">
<contenttemplate>
<table width="100%">
<tr>
<td valign="top" style="width: 70px">
<strong>Kommentar:</strong></td>
<td style="width: 433px" valign="middle">
<asp:TextBox ID="tbxThreadMessage" runat="server" Height="146px" TextMode="MultiLine"
Width="400px" MaxLength="3000"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="tbxThreadMessage"
ErrorMessage="Venligst indtast en kommentar.">*</asp:RequiredFieldValidator></td>
</tr>
</table><BR />
</contenttemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ibSmiley1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:ImageButton ID="ibSmiley1" runat="server" ImageUrl="~/images/Graphics/Icons/Smileys/s1.gif" />
Når jeg gør som ovenover sker der det at fokus forsvinder fra tekstfeltet imens jeg skriver i det (jeg går ud fra at det er ajax-kaldene der forårsager det).
Hvordan undgår jeg så det?
Skrevet tor. d. 26. april 2007 kl. 20:12:30| #3
Well... Hvis den tekst du vil tilføje skal generere af serveren, bliver du jo nødt til at kommunikere med den, og der skulle ikke gerne ske noget med mindre du trykker på knappen (jeg formoder det også er hensigten).
Når du klikker på knappen giver du jo den fokus - så du skal gøre noget aktivt for at få fokus tilbage til tekstboksen.
Mvh
Skrevet fre. d. 27. april 2007 kl. 08:48:45| #4
Du kan gøre det med javascript uden noget som helt:
<script type="text/javascript">
function AddText(text, id)
{
var value =document.getElementById(id).getAttribute("value");
document.getElementById(id).setAttribute("value",value+ ' ' + text );
}
</script>
Skrevet fre. d. 27. april 2007 kl. 08:49:49| #5
Server side code.
<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<img src="images\indicator.gif" onclick="AddText('adgsg',<% = "'"+txtTest.ClientID+"'" %>)" />
Skrevet fre. d. 27. april 2007 kl. 08:50:17| #6
du kan bruge document.getElementById(id).select(); til at sætte fokus på feltet hvis nødvendigt.
Skrevet fre. d. 27. april 2007 kl. 09:27:15| #7
Snepnet>>> Det jeg mener er: Mens jeg skriver i tekstfeltet (uden at klikke på knappen) forsvinder fokus fra textfeltet. Når jeg klikker på knappen så indsættes ":-)" rigtig nok. Så der er et eller andet der fjerner fokus mens jeg skriver (muligvis noget med trigger'en at gøre).
dr_chaos>>> Okay og du mener at jeg sagtens kan få fat i en asp.net control med document.getElementById()?
Skrevet fre. d. 27. april 2007 kl. 09:33:24| #8
ja
Jeg henter id på min textbox med txtTest.ClientID.
Som vist her:
<img src="images\indicator.gif" onclick="AddText('adgsg',<% = "'"+txtTest.ClientID+"'" %>)" />
Den kode jeg har vist dig er en jeg har lavet og testet på.
Så den virker hos mig.
Skrevet fre. d. 27. april 2007 kl. 09:37:00| #9
dr_chaos>>> Okay, jeg prøver det lige af når jeg får tid, tak ;-)
Skrevet fre. d. 27. april 2007 kl. 09:44:12| #10
Skrevet fre. d. 27. april 2007 kl. 18:20:27| #11
Det virker som om der er noget andet på din side der driller...
Er det ikke bare sådan noget her du har:
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</form>
Men anyway ... Det væsentligste i første omgang er, at du får lagt fast om de data du skal fylde i teksboksen skal hentet på serveren eller ej... Skal de ikke det, er en ren clientside løsning self. bedst.
Mvh
Skrevet søn. d. 29. april 2007 kl. 15:33:42| #12
dr_chaos>> Det ser ud til at virke fint i IE, men ikke i FF. Har du en ide til hvordan det kan være?
snepnet>> Jo det er vist helt identisk med den måde jeg gør det på. Du har ret, det mest optimale er en client-side løsning ligesom dr_chaos foreslår.
Kan jeg vha. javascript få indsat teksten der hvor curseren er? Jeg mener at have set et eksempel et sted på nettet men jeg smed det væk, da jeg ikke fik det til at virke. Måske var det fordi, at jeg kun afprøvede det i FF.
Skrevet søn. d. 29. april 2007 kl. 20:37:36| #13
prøv lige med:
function AddText(text, id)
{
var value =document.getElementById(id).value
document.getElementById(id).value=value+ ' ' + text;
}
Skrevet søn. d. 01. juli 2007 kl. 08:42:34| #14
Hvordan går det her fanatic?
Mvh
Skrevet søn. d. 01. juli 2007 kl. 08:43:42| #15
Jeg lægger et svar hvis du kunne bruge noget af det jeg skrev...
Mvh