Oprettet tor. d. 26. april 2007 kl. 19:33:23

fanatic
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

snepnet
snepnet (87.110 point)
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

fanatic
fanatic (9.440 point)
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

snepnet
snepnet (87.110 point)
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

dr_chaos
dr_chaos (73.666 point)
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

dr_chaos
dr_chaos (73.666 point)
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

dr_chaos
dr_chaos (73.666 point)
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

fanatic
fanatic (9.440 point)
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

dr_chaos
dr_chaos (73.666 point)
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

fanatic
fanatic (9.440 point)
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

snepnet
snepnet (87.110 point)
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

fanatic
fanatic (9.440 point)
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

dr_chaos
dr_chaos (73.666 point)
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

snepnet
snepnet (87.110 point)
Hvordan går det her fanatic?
Mvh

Skrevet søn. d. 01. juli 2007 kl. 08:43:42| #15

snepnet
snepnet (87.110 point)
Jeg lægger et svar hvis du kunne bruge noget af det jeg skrev...
Mvh

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

GridView og RowCommand

Oprettet den 22. maj 2012 kl. 17.34
faran giver 30 point for svar | Giv et svar »

Flere betingelser i repeater.

Oprettet den 15. maj 2012 kl. 21.45
fuldstop giver 60 point for svar | Giv et svar »

kombinere code behind og Javascript

Oprettet den 6. maj 2012 kl. 09.02
tjacob giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger