Avatar billede stephanryer Nybegynder
02. januar 2006 - 15:08 Der er 45 kommentarer og
1 løsning

Meddelelse med svarmulighederne "ja" eller "nej" ved klik på knap

Er det muligt at få en meddelelse til at poppe op ved klik på en Button på en hjemmeside og så udføre forskellig kode alt efter om brugeren klikker "Ja" eller "Nej" til denne meddelelse?

Denne meddelelse kunne fx se sådan ud:


Du har valgt XXX
Kunne du evt tænke dig XXX?

    Ja        Nej

Hvis jeg er vag i min formulering af problemet så sig endelig til. Så må jeg jo prøve at formulere mig bedre :)

På forhånd tak.
Avatar billede dr_chaos Nybegynder
02. januar 2006 - 15:12 #1
du kan lave det med ok og cancel i javascript.
hvad type kode er det som skal afvikles ?
vil det kræve et postback af siden ?
Avatar billede stephanryer Nybegynder
02. januar 2006 - 15:14 #2
Der skal spørge om man kunne tænke sig at modtage en email med nogle informationer. Dvs det er en metode som jeg gerne vil have udført hvis brugeren vælger "Ja". Der skal ikke udføres noget ved "Nej".
Avatar billede dr_chaos Nybegynder
02. januar 2006 - 15:23 #3
er det ikke bedre at tilføje en checkboks på siden ?
Hvor brugerne kan sætte et hak hvis de ønsker at modtage en e-mail.
Avatar billede stephanryer Nybegynder
02. januar 2006 - 15:24 #4
well, det er faktisk kun én person der skal sidde med denne side og han skal bare spørges om han vil have en email sendt til brugeren når han aktiverer noget bestemt, så for at han ikke glemmer det vil jeg foretrække et popvindue der direkte spørger ham.
Avatar billede stephanryer Nybegynder
02. januar 2006 - 15:47 #6
Well jeg er ikke inde i VB syntaks så for mig er den viste kode ikke helt logisk.
Avatar billede snepnet Nybegynder
02. januar 2006 - 17:38 #7
du kan bare lægge et lille script på din knap ... hvis du har en

<asp:Button id="btnDoIt" runat="server" />

på din side, kan du i page_load (ell).

btnDoIt.Attributes.Add("onclick","return confirm('blahblah');");

mvh
Avatar billede stephanryer Nybegynder
02. januar 2006 - 17:52 #8
Jeg ved godt hvordan man får en knap til at udføre en handling men jeg vil have at når man klikker på knappen skal der komme en lille popup besked der spørger om man har lyst til at sende en email og der skal der så være mulighederne "Ja" og "Nej" som hver især skal gøre noget forskelligt.
Avatar billede snepnet Nybegynder
03. januar 2006 - 11:17 #9
i det eksempel jeg sendte vil der ikke komme noget postback ved negativt svar, så den kode du har der sender mailen vil altså ikke blive kørt.

hvis der svares positivt - vil der ske et postback og du kan samle eventet op serverside og gøre det der skal gøres for mailafsendelse:

protected void btnDoIt_Click(object sender, EventArgs e)
{
  // koden her køres kun når brugeren svarer positivt
}

og confirm('...') giver dig en almindelig "bekræftelse-dialogboks" / pop-up.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 12:55 #10
Men findes der ikke en mulighed med Ja / Nej istedet for OK / Cancel som kan udføre to forskellige koder?
Avatar billede snepnet Nybegynder
03. januar 2006 - 13:31 #11
jeg tror ikke du umiddelbart kan ændre teksten på knapperne, men du kan formulere spørgsmålet så det passer til knapperne :o)

du kan godt lave det så der kaldes to forskellige serverside-metoder afhængigt af brugerens svar, hvis det er det du vil - men det er mere bikset end det viste.

hvis du selv ønsker fuld kontrol - kan du lave dig en div, der viser tekst og knapper som du ønsker, og så gøre den synlig clientside når du vil - og håndtere knapklik fra den på serveren.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 14:17 #12
jeg tænker ikke på at ændre teksten på knapperne men simpelthen bruge en anden klasse til det ønskede formål.
Avatar billede snepnet Nybegynder
03. januar 2006 - 14:28 #13
det er vel sådan set også det forslag jeg skrev 13:31:18 - del 2.

du kan lave en kontrol (eller bare en div) som ser ud som du synes den skal se ud, og så kan du sætte knapper mv. på som du lyster, og du kan så håndtere klik på dem serverside.

hvis jeg har misforstået dig, må du lige give mig et vink.... hvad er det du ønsker der skal være en klasse for sig?

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 14:31 #14
Hvis du fx sidder i word og prøver at lukke word ned bliver du spurgt om du vil gemme først. Det er sådan en knap jeg skal bruge. Bare uden cancel.

Som jeg forstår det med din div så er det bare noget der vil være synligt på selve siden, ikke?
Avatar billede snepnet Nybegynder
03. januar 2006 - 14:47 #15
uden cancel ... ? - skal man ikke have lov til at angive at man ikke ønsker det sker?
(jeg mener ... du skal da have 2 knapper i dialogboksen ikke?)

som med words gemknap - så sker der kun noget hvis du trykker ok - hvilket også er det der sker med det jeg skrev 11:17:11, så umiddelbart virker det stadig som en rimelig løsning udfra det du skriver.

og den med div'en så jo... det er noget der vil være synligt på selve siden - er det ikke det du vil?

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 15:19 #16
nej det skal ikke være synligt på siden. Jeg tror jeg vil arbejde med det OK / Cancel så. Hvordan benyttes confirm('...') ?
Avatar billede snepnet Nybegynder
03. januar 2006 - 15:33 #17
confirm benyttes som skrevet her 02/01-2006 17:38:36 - du giver den bare den besked der skal stå i dialogboksen.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 15:34 #18
ja, men hvordan trækker man så brugerens valg ud? Altså finder ud af om han har klikket OK eller Cancel?
Avatar billede snepnet Nybegynder
03. januar 2006 - 16:03 #19
denne her:
btnDoIt.Attributes.Add("onclick","return confirm('blahblah');");
sørger for at returnere retuværdien fra confirm-dialogboksen - hvis true udføres et postback, og du kan så i knaphandleren for den knap der sørger for at vise confirm pop-up'en, eksekvere den kode du har behov for at eksekvere, hvis brugeren trykker på ok.

hvis du ønsker at eksekvere kode på serveren hvis brugeren klikker cancel, må du opsamle resultatet fra confirm pop-up'en clientside - og kalde forskellige metoder på serveren afhængig af resultatet (som blot er true/false).

noget i denne stil:

// javascript
function extendedConfirm()
{
  var result = confirm('Er du sikker');
  if(result)
  {
    // hvis ok
  }
  else
  {
    // hvis cancel
  }
}

balladen er - at det er serverside kode du skal have eksekveret (formoder jeg i hvert fald) - så du skal sørge for at der udføres et postback, der ultimativt rammer den metode du ønsker eksekveret.

koden du skal bruge i dit javascript skal dog helst genereres til dig, og måden at få det fikset er afhængig af om du bruger version 1.x eller version 2.0 - så kan du ikke lige skrive hvad du bruger - så skal du få et eksempel.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 16:05 #20
jeg bruger 2.0 men hvorfor blander du javascript ind i det??? Jeg vil lave det i asp.net 2.0.
Avatar billede snepnet Nybegynder
03. januar 2006 - 16:26 #21
du kan ikke få noget til at "poppe op" hos klienten serverside - derfor er javascriptet indblandet.
såhh... med mindre du mener noget andet med at "poppe op" end jeg gør - så må du leve med at skulle lave noget javascript.

confirm('...') er også javascript.

og denne
btnDoIt.Attributes.Add("onclick","return confirm('blahblah');");

sørger for at du på clientside click-eventet kører noget kode (return confirm('blahblahblah');

din C# kode kører på serveren - som ikke har nogen som helst muligheder for at manipulere med en brugers vinduer mv.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 16:36 #22
well kan man så lave det popup-vindue client-side og derefter eksekvere noget serverside kode ?
Avatar billede snepnet Nybegynder
03. januar 2006 - 16:45 #23
naturligvis ... det er det der står 16:03:16, men det er en smule specielt hvis du skal gøre det rigtigt.
er du frisk på et eksempel?
mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 16:45 #24
Ohhhhhhh yeah :D Hvis du gider?
Avatar billede stephanryer Nybegynder
03. januar 2006 - 16:45 #25
Bare der ikke indgår noget javascript :)
Avatar billede snepnet Nybegynder
03. januar 2006 - 16:47 #26
:oD
- javascript undgår du ikke, men jeg pakker det ind i koden ;o)
mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 16:58 #27
well er der ikke nogen browsere der har slået javascript fra?
Avatar billede snepnet Nybegynder
03. januar 2006 - 17:05 #28
jo - det kan slås fra.
Avatar billede stephanryer Nybegynder
03. januar 2006 - 17:06 #29
well jeg vil gerne have en løsning der vil være brugbar hos alle.
Avatar billede snepnet Nybegynder
03. januar 2006 - 17:15 #30
du har skrevet at der kun er én person der skal bruge siden?

hvis folk har slået javascript fuldstændig fra - er temmelig mange ting på nettet de ikke kan, så jeg ved ikke hvor udbredt det er.

men igen ... hvis du vil lave pop-ups foregår det med clientside scripts.

hvis du ikke vil have pop-ups af den ene eller den anden årsag, må du skrive hvad du så vil have.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 17:29 #31
Ok, well så tror jeg bare vi siger det godt må benytte en lille smule javascript. Men jeg vil gerne have at hovedvægten ligger på asp.net :)
Avatar billede snepnet Nybegynder
03. januar 2006 - 17:36 #32
ok ... det her kan vise dig principperne i det for 2.0

læg mærke til at jeg sådan set har sat to knapper på formen der illustrerer de to knapper du har på en clientside confirm-boks.

det er slags mapning mellem "clientside-knapperne" og "server-knapperne"

// en aspx-fil

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ConfirmSample.aspx.cs" Inherits="ConfirmSample" EnableEventValidation="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnCancel" runat="server" Text="Cancel" Visible="False" OnClick="btnCancel_Click" />
        <asp:Button ID="btnOk" runat="server" Text="OK" Visible="False" OnClick="btnOk_Click" />
        <br />
        <br />
        <asp:Button ID="btnExtendedButton" runat="server" Text="TryIt" OnClick="btnExtendedButton_Click" />         
        <br />
        <br />
        <asp:Label ID="lblResult" runat="server" Text=""></asp:Label></div>       
    </form>
</body>
</html>



// og kode

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Data.OleDb;

public partial class ConfirmSample : System.Web.UI.Page
{
    private string GenerateScript(string message, string referecenForOK, string referenceForCancel)
    {
        StringBuilder script = new StringBuilder();
        script.Append(@"
        function extendedConfirm()
        {
          var result = confirm('");
          script.Append(message);
          script.Append(@"');
          if(result)
          {
            ");
          script.Append(referecenForOK);
          script.Append(@"         
          }
            else
          {
            ");
          script.Append(referenceForCancel);
          script.Append(@"         
          }
          return false;
        }");

        return script.ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ClientScript.RegisterStartupScript(this.GetType(), "extendedConfirmScript", GenerateScript("Er du sikker", ClientScript.GetPostBackEventReference(btnOk, String.Empty), ClientScript.GetPostBackEventReference(btnCancel, String.Empty)), true);
        AddConfirmExtension(btnExtendedButton);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        ClientScript.RegisterForEventValidation(btnOk.UniqueID, String.Empty);
        ClientScript.RegisterForEventValidation(btnCancel.UniqueID, String.Empty);
        base.Render(writer);
    }

    private void AddConfirmExtension(Button button)
    {
        button.Attributes.Add("onclick", "return extendedConfirm();");
    }

    protected void btnExtendedButton_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on ExtendedButton";
    }
   
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on Cancel";
    }
   
    protected void btnOk_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on OK";
    }
}

hiv det ind i vs eller hvad du nu udvikler i - og kig lidt på det.

mvh
Avatar billede stephanryer Nybegynder
03. januar 2006 - 17:40 #33
bruger web deveoper. Thank you. ser på det right away!
Avatar billede stephanryer Nybegynder
03. januar 2006 - 17:43 #34
ved det måske er lidt meget forlangt men vil du evt prøve at lave et eksempel hvor al c# koden blot ligger i et <script> på samme side? Sådan har jeg nemlig gjort hele vejen indtil nu og vil gerne holde samme stil hele vejen :)
Avatar billede snepnet Nybegynder
03. januar 2006 - 18:39 #35
ok ... det kan jeg ikke forstå at du foretrækker.

for en anden gangs skyld skal du bare kopiere koden til
<script language="C#" runat="server">
</script>
under header-tag'et

det eneste der kan være yderligere er dit pagedirective, men for det her eksempel behøver der ikke stå noget som helst i det.

mvh

<%@ Page %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title> 
    <script language="C#" runat="server">
    private string GenerateScript(string message, string referecenForOK, string referenceForCancel)
    {
        StringBuilder script = new StringBuilder();
        script.Append(@"
        function extendedConfirm()
        {
          var result = confirm('");
          script.Append(message);
          script.Append(@"');
          if(result)
          {
            ");
          script.Append(referecenForOK);
          script.Append(@"         
          }
            else
          {
            ");
          script.Append(referenceForCancel);
          script.Append(@"         
          }
          return false;
        }");

        return script.ToString();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!ClientScript.IsStartupScriptRegistered("extendedConfirmScript"))
        {
            ClientScript.RegisterStartupScript(this.GetType(), "extendedConfirmScript", GenerateScript("Er du sikker", ClientScript.GetPostBackEventReference(btnOk, String.Empty), ClientScript.GetPostBackEventReference(btnCancel, String.Empty)), true);
        }
        AddConfirmExtension(btnExtendedButton);
    }

    protected override void Render(HtmlTextWriter writer)
    {
        ClientScript.RegisterForEventValidation(btnOk.UniqueID, String.Empty);
        ClientScript.RegisterForEventValidation(btnCancel.UniqueID, String.Empty);
        base.Render(writer);
    }

    private void AddConfirmExtension(Button button)
    {
        button.Attributes.Add("onclick", "return extendedConfirm();");
    }

    protected void btnExtendedButton_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on ExtendedButton";
    }
   
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on Cancel";
    }
   
    protected void btnOk_Click(object sender, EventArgs e)
    {
        lblResult.Text = "Click on OK";
    }   
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="btnCancel" runat="server" Text="Cancel" Visible="False" OnClick="btnCancel_Click" />
        <asp:Button ID="btnOk" runat="server" Text="OK" Visible="False" OnClick="btnOk_Click" />
        <br />
        <br />
        <asp:Button ID="btnExtendedButton" runat="server" Text="TryIt" OnClick="btnExtendedButton_Click" />         
        <br />
        <br />
        <asp:Label ID="lblResult" runat="server" Text=""></asp:Label></div>       
    </form>
</body>
</html>
Avatar billede stephanryer Nybegynder
06. januar 2006 - 17:16 #36
Ved første øjekast havde jeg lidt svært ved at se hoved og hale i den kode, men jeg har nu gennemført en simpel javascript tutorial. Vil du ikke udspecificere hvordan forbindelsen med asp.net og javascript helt præcis foregår. Fx hvordan man fra javascript eksekverer en asp.net-metode? Så simpelt som du overhovedet kan lave det. Det ville bare være rigtig nice!
Avatar billede stephanryer Nybegynder
06. januar 2006 - 17:20 #37
...og evt også hvordan man eksekverer en javascript-metode / kører noget javascript fra asp.net :)
Avatar billede snepnet Nybegynder
06. januar 2006 - 17:36 #38
jeg tror der er noget du lige skal være med på.

javascript kører i browseren hos den bruger der kigger på din webapplikation, og det kan ikke kalde metoder i din c# kode direkte.

din c# kode kører på serveren og kan ikke kalde noget i browseren hos klienten direkte.

så som udgangspunkt er der overhovedet ingen forbindelse mellem dit javascript og din c# kode.

det jeg har sendt dig er mindre kompliceret hvis du tager et kig på den resulterende html-kode (altså view source i browseren).
der kan du se hvordan det hænger sammen.

asp.net baserer sig på noget de kalder postback, hvilket eksekveres fra browseren vha. en javascipt metode som du kan se i den resulterende html - noget i denne stil:

function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}

udfra eventtarget og eventargument finder asp.net frameworket ud af hvad der skal kaldes i din kode, hvilket baserer sig på kontrollernes unikke id (som du også kan se i html'en).

så hvis du fra javascript skal udføre et postpack skal du altså kalde:
__doPostBack(eventTarget, eventArgument)

men... der er ikke nogen der har lovet at den bliver ved med at hedde det samme, så derfor benytter man features i asp.net til at få fat i navnet på den metode, hvilket er hvad
ClientScript.GetPostBackEventReference(btnCancel, String.Empty)

altså ... den får navnet på metoden, og den sørger for at sætte argumenterne således at når den kaldes, så resulterer det i et postback - og frameworket vil tro at der er klikket på knappen btnCancel, hvorefter eventhandleren for klikeventet kaldes.

mvh
Avatar billede snepnet Nybegynder
06. januar 2006 - 17:40 #39
og du kan altså så ikke på nogen måde kalde en javascript funktion fra din c# kode... men du kan sørge for at skrive noget html ud - der gør at browseren eksekverer et javascript.
f.eks. kan i din c# kode gøre noget som nedenstående:

form1.Attributes.Add("onload","alert('test');");

hvilket medfører at dit formtag kommer til at indeholde
<form onload="alert('test');" ... hvilket så medfører at javascriptet alert('test') eksekveres når formen loades (i browseren).

mvh
Avatar billede stephanryer Nybegynder
06. januar 2006 - 18:44 #40
præcis som du selv foreslog, så har jeg set noget asp.net kode til et generere javascriptet dynamisk. Jeg kigger lige på det på onsdag. Jeg skal læse til eksamen nu her. Vi benytter java.

Men tusind tak for de uddybende forklaringer indtil videre.
Avatar billede snepnet Nybegynder
06. januar 2006 - 19:02 #41
det var i hvert fald så lidt.
mvh
(java ... hvad er meningen ;o)
Avatar billede stephanryer Nybegynder
06. januar 2006 - 19:04 #42
Det er jo mit uddannelsessted der har fået det trukket ned over hovedet. Det er fordi java og jsp er gratis. Derfor vi skal bruge det. Læser til datamatiker. På mit arb bruger vi c# og asp.net :)
Avatar billede snepnet Nybegynder
06. januar 2006 - 20:54 #43
c# / asp.net er sådan set også gratis, men det er da bestemt en go' ting at kunne noget java synes jeg.
mvh
Avatar billede dr_chaos Nybegynder
04. februar 2006 - 17:09 #44
Du mangler at lukke spørgsmålet.
Avatar billede stephanryer Nybegynder
05. februar 2006 - 11:54 #45
snepnet læg et svar.
Avatar billede snepnet Nybegynder
05. februar 2006 - 12:25 #46
det kommer her :o)
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