Avatar billede Tobyyyy Nybegynder
22. september 2011 - 15:39 Der er 13 kommentarer og
1 løsning

Webapplikation: TextBox TextChanged i Asp.net + C#

Hej Eksperter
Mit problem består i at jeg gerne vil kalde en metode, når at der bliver skrevet i en tekstbox.

Ligesom man i C# har eventen TextChanged.

Jeg har allerede prøvet textbox_textchanged med auto post back, ligesom der foreslåes her:
http://www.aspxcode.net/free-asp-net-sample-source-code.aspx?Topics=How%20to%20use%20Event%20TextBox%20TextChanged

Men det kan jeg ikke få til at virke.

Jeg anvender visual studio og projeket er oprettet ud fra en webapplication skabelon og hoster bagefter applikationen på en iis før jeg kører den.

Kan det gøres på en smartere måde med noget script, så nemlig nogen der skrev noget om det også var lidt "grimt" at anvende autopost back til det.
Avatar billede Syska Mester
22. september 2011 - 15:43 #1
Kommer lidt an på "hvorfor" du vil have et kald til serveren ?

Men måske dette er hvad du søger: http://jqueryui.com/demos/autocomplete/

mvh
Avatar billede Tobyyyy Nybegynder
22. september 2011 - 15:45 #2
Altså det jeg er vil at jeg vil have en tekstboks, hvor at man skal skrive postnummer i - når så at teksten deri bliver ændret har jeg en metode til at hente byen i min database og skrive den selv by feltet.

Jeg prøver lige at kigge på det link du sendte.
Avatar billede Syska Mester
22. september 2011 - 15:52 #3
Så er det måske ikke lige autocomplete du skal bruge.

Men bare generelt jQuery eller andet library.

Lav en webservice.
Rod med noget ajax/event når der er skrevet 4 tal ( da postnummer i DK er 4 tal )
Send et request mod din service og retuner navnet på byen.

burde være rimelig nemt.

mvh
Avatar billede Tobyyyy Nybegynder
22. september 2011 - 16:10 #4
Nu er jeg slet ikke inde i javascript, kan man ikke bare skrive et lille javascript over textboxen i .aspx filen hvis at der sker en ændring i tekstfeltet, som derefter kalder en metode i aspx.cs filen? :)

Eller skal man til at lave en webservice for det? Jeg kalder jo bare direkte fra min aspx.cs fil ned i databasen og henter oplysningerne.
Så skal bare have at vide hvornår den skal tage teksten og se om postnummeret passer med noget som er i databasen.
Avatar billede Syska Mester
22. september 2011 - 16:19 #5
Server Side vs Client Side

Så nej ... du skal lave noget javascript. Det kan du ikke komme uden om. Med mindre du bruger PostBack ... men det er lidt samme problem, bare "aspnet webforms" som har det indbygget.

Kig eventuelt på: http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

Det burde kaste dig i den rigtige retning.

havde du bruger asp.net mvc så kunne jeg nemmere hjælpe.

mvh
Avatar billede Tobyyyy Nybegynder
22. september 2011 - 18:55 #6
Okay jeg vidste ikke rigtig hvad der var forskelligt fra asp.net og så asp.net mvc, så jeg tog bare det almindelige. Plejer normalt kun at kode til windows forms :)

Men jo tak jeg kigger på dit link i morgen, er ikke lige ved den computer med koden og databasen på nu.

Du må smide et svar hvis du vil have point :)
Avatar billede Tobyyyy Nybegynder
23. september 2011 - 11:40 #7
Jeg har prøvet at lave mit javascript ud fra dit eksempel.

Her er koden i OpretBruger.aspx:
<p>
<asp:TextBox ID="TextBoxPostnr" runat="server" MaxLength="4"></asp:TextBox>
<asp:TextBox ID="TextBoxBy" runat="server" ReadOnly="True"></asp:TextBox>
</p>
<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript">
      $('#TextBoxPostnr').click(function () {
          $.ajax({
              type: "POST",
              url: "OpretBruger.aspx/postnrChanged",
              data: "text",
              contentType: "application/json",
              dataType: "json",
              success: function (msg) {
                  $("#TextBoxBy").text(msg.d);
              }
          });
      });
  </script>

I min anden klasse OpretBruger.aspx.cs har jeg:

[WebMethod(EnableSession = false)]
        public static string postnrChanged(string postnr)
        {
            FaellesMetoder faellesMetoder = new FaellesMetoder();
            return faellesMetoder.postnrChanged(postnr);
        }

Jeg har prøvet at sætte breakpoint ind i javascriptet i visual studio, men jeg synes slet ikke jeg ryger inde i det (Ved ikke om man kan det i visualstudio overhovedet med javascripts).

Har også prøvet at skifte til nogle andre end .click som foreksempel .blur

Kan ikke helt se hvad jeg gør forkert, det måske fordi at i eksemplet bruges der et dir og jeg bruger en tekstboks som skal tjekkes. Men kan ikke finde andre måder man skal skrive det på i før .click, eller hvad funktion man nu har på.
Avatar billede Syska Mester
23. september 2011 - 12:06 #8
Dit ID for din textbox er forkert ...

Hvis du prøver at kigge i source kode for html kan du se det.

Kig på: http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode.aspx

Så vil den have det ID du angiver den. Der er en lang historie bag hvorfor den gør som den gør.

Du skal nok bruge: Static.

mvh
Avatar billede Tobyyyy Nybegynder
23. september 2011 - 13:01 #9
I det eksempel du linkede til, til at starte med der anvender han heller ikke noget static - kun til webmetoden.

Der har han:
<div id="Result">Click here for the time.</div>

og han angiver result som id, ligesom jeg har:
<asp:TextBox ID="TextBoxPostnr" runat="server" MaxLength="4"></asp:TextBox>

og angiver TextBoxPostnr som id.

Du må undskylde hvis det lyder dumt, men jeg har ikke erfaring med javascript, men jeg er glad for din hjælp.

Forresten hvis jeg ser i kildekoden når jeg kører den igennem visual studio står der stadigvæk det samme som i .aspx filen.
Btw. så har jeg sat scriptet indenfor
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> </asp:Content>

Har det nogen betydning? er det fint det står i body eller skal det rykkes udenfor?
Avatar billede Syska Mester
23. september 2011 - 13:17 #10
Problemer at at din TextBox med id'et "TextBoxPostnr" får et hirakisk navn når det bliver rendered.
Så på klienten hedder det måske nu: "masterpage$placeholder$panel$TextBoxPostnr"

Dvs når dit javascirpt prøver at finde din tekstbox der hedder "TextBoxPostnr" kan den ikke finde den, for .NET har givet den overstående lange navn, for at være sikker på at alle controls er unikke.

Det er en naming convension som er indbygget i asp.net. Hvis du derimod sætter ClientIdMode="static" på din tekstbox, vil den beholde det ID du giver den, og ikke lave overstående nummer.
Nu er du selv ansvarlig for at du ikke har 2 kontrols med samme navn.

Du skal også lige huske at have dit javascirpt ind i en:

$(document).ready(function() {
// dit js her
}
Avatar billede Tobyyyy Nybegynder
23. september 2011 - 14:11 #11
Arhh okay, nu forstår jeg det hvad ud mener med id'erne - jeg skulle bare lige have det skåret ud i pap - mange tak :)

Synes ikke rigtig at jeg ryger ind i selve scriptet alligevel. Jeg tilføjede de linje som du skrev før og efter scriptet: $(document).ready(function() {
// js her
}
Men så stod der $(document).ready(function() { som tekst på siden, så rykkede jeg det ind i en js.fil for sig selv (som nok også er "pænere").

Så jeg har findBy.js:
$(document).ready(function() {
        $('TextBoxPostnrUnik').change(function () {
          $.ajax({
              type: "POST",
              url: "OpretBruger.aspx/postnrChanged",
              data: "text",
              contentType: "application/json",
              dataType: "json",
              success: function (msg) {
                  $("#TextBoxByUnik").text(msg.d);
              }
          });
      });
});

og har så dette i headeren, som der blev vist på den side jeg fandt:

asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">

<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript">
<script src="Scripts/findBy.js" type="text/javascript"></script>

</asp:Content>

Har også husk at tilføje static på begge tekstbokse, ligesom:
<asp:TextBox ID="TextBoxPostnrUnik" runat="server" MaxLength="4" ClientIdMode="static" ></asp:TextBox>

Men jeg kører bare med en midlertidig knap der skal trykkes for at byen bliver fundet, indtil efter weekenden :)

Men tak for din hjælp igen.
Avatar billede Syska Mester
23. september 2011 - 14:20 #12
Hvis du kan pakke det "mest nødvendige" uden en masse ekstra ting, så kan jeg teste det når jeg kommer hjem i dag. Smide det på en upload service.

Måske en simple ting der mangler.

mvh
Avatar billede Tobyyyy Nybegynder
23. september 2011 - 19:34 #13
Så ikke lige din besked før jeg tog hjem, ellers virkelig fedt at du ville gøre det - men jeg har desværre ikke lige adgang til det før på onsdag fordi vi skal på kursus og der er min vejleder tilbage igen, så kan han nok hjælpe mig. Ellers må jeg jo se om jeg kan få dig til at hjælpe mig med det, hvis jeg ikke har fundet en løsning inden :)

Tak for din hjælp i hvert fald, du må godt smide et svar så du kan få point :)
Avatar billede Syska Mester
23. september 2011 - 19:49 #14
svar
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