Avatar billede fanatic Nybegynder
26. april 2007 - 19:33 Der er 14 kommentarer og
1 løsning

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?
Avatar billede snepnet Nybegynder
26. april 2007 - 19:38 #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
Avatar billede fanatic Nybegynder
26. april 2007 - 19:48 #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?
Avatar billede snepnet Nybegynder
26. april 2007 - 20:12 #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
Avatar billede dr_chaos Nybegynder
27. april 2007 - 08:48 #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>
Avatar billede dr_chaos Nybegynder
27. april 2007 - 08:49 #5
Server side code.
<asp:TextBox ID="txtTest" runat="server"></asp:TextBox>
<img src="images\indicator.gif" onclick="AddText('adgsg',<% = "'"+txtTest.ClientID+"'" %>)" />
Avatar billede dr_chaos Nybegynder
27. april 2007 - 08:50 #6
du kan bruge document.getElementById(id).select(); til at sætte fokus på feltet hvis nødvendigt.
Avatar billede fanatic Nybegynder
27. april 2007 - 09:27 #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()?
Avatar billede dr_chaos Nybegynder
27. april 2007 - 09:33 #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.
Avatar billede fanatic Nybegynder
27. april 2007 - 09:37 #9
dr_chaos>>> Okay, jeg prøver det lige af når jeg får tid, tak ;-)
Avatar billede dr_chaos Nybegynder
27. april 2007 - 09:44 #10
oki
Avatar billede snepnet Nybegynder
27. april 2007 - 18:20 #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
Avatar billede fanatic Nybegynder
29. april 2007 - 15:33 #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.
Avatar billede dr_chaos Nybegynder
29. april 2007 - 20:37 #13
prøv lige med:
function AddText(text, id)
{
var value =document.getElementById(id).value
document.getElementById(id).value=value+ ' ' + text;

}
Avatar billede snepnet Nybegynder
01. juli 2007 - 08:42 #14
Hvordan går det her fanatic?
Mvh
Avatar billede snepnet Nybegynder
01. juli 2007 - 08:43 #15
Jeg lægger et svar hvis du kunne bruge noget af det jeg skrev...
Mvh
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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