Avatar billede badal Nybegynder
04. januar 2005 - 17:50 Der er 13 kommentarer og
1 løsning

JavaScript og .NET [Vanskeligt spm]

Jeg har en aspx side hvor jeg åbner en:

1. åbner en window.showModalDialog("modalDialogSource.htm", myObject, "dialogHeight:300px; dialogLeft:200px;");

2. klikker på en button(btn_1) i denne "popupvindue".

3. btn_1 har en onclick funktion som aktivere "klikket" i aspx siden.
dialogArguments.document.getElementById("btn_Test").click();

4. Men javascript click funktionen virker ikke. Så der skal laves egen klik funktion.

Kan nogen give et eksempel på hvordan dette skal gøres ?
Dvs. der skal laves en funktion som har samme effekt som denne:

dialogArguments.document.getElementById("btn_Test").click();

dvs. at der rejses en klik event på knappen btn_Test??
Avatar billede snepnet Nybegynder
04. januar 2005 - 19:49 #1
du skulle nu sagtens kunne gøre det.... du kan lige se nedenstående (i håb om at jeg ikke har misforstået dig).

Det er bare den væsentlige kode. Du må lige sige til hvis du ikke kan flette det ind så det kan bruges...
Jeg har ikke nogen problemer med at få det til at virke her.
(id'et på den knap der skal trykkes ind - medsendes i querystring)

mvh

// page_load på en "opener" side :
protected HtmlForm Form1;

private void Page_Load(object sender, System.EventArgs e)
{
    Button btn = new Button();
    btn.Click += new EventHandler(btn_Click);
    Form1.Controls.Add(btn);

    Label l = new Label();
    l.Text = "Open window";
    l.Attributes.Add("onclick","window.open('lookup.aspx?OpenerButtonId=" + btn.ClientID + "');");
    Form1.Controls.Add(l);
}

// og en lookup.aspx - altså den side der åbnes
<%@ Page language="c#" Codebehind="lookup.aspx.cs" AutoEventWireup="false" Inherits="EXP2.badal.lookup" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>lookup</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
        <script language="javascript">
        function ClickIt(clientId)
        {
            window.opener.document.getElementById(clientId).click();
        }
        </script>       
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:Label id="Label1" runat="server">Label</asp:Label>
        </form>
    </body>
</HTML>

// og codebehind på samme side
protected System.Web.UI.WebControls.Label Label1;

protected string OpenerButtonId
{
    get{return Request.QueryString["OpenerButtonId"];}
}

private void Page_Load(object sender, System.EventArgs e)
{
    Label1.Attributes.Add("onclick", "ClickIt('" + OpenerButtonId + "');");
}
Avatar billede badal Nybegynder
04. januar 2005 - 21:05 #2
showModalDialog:
<html>
    <head>
        <title></title>
        <script>
            function buttonSend()
            {
                __doPostBack('Button1','');
            }
        </script>
    </head>
    <body>
        <input type="button" onclick="buttonSend();" value="test" ID="Btn_11" NAME="Btn_11"><br>
    </body>
</html>

<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="WebApplication11.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <BUTTON onclick="window.showModalDialog('open.htm',window);" type="button">Åben vindue</BUTTON><br>
            <asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
            <asp:Label id="Label1" runat="server" Width="176px">Label</asp:Label>
        </form>
    </body>
</HTML>

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace WebApplication11
{
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.Label Label1;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void Button1_Click(object sender, System.EventArgs e)
        {
            Label1.Text = "Der er klikket";
        }
    }
}
Avatar billede badal Nybegynder
04. januar 2005 - 21:08 #3
hej snepnet
jeg har lavet en lille udgave af problemmet. Denne illustere nok bedre end i mit først indlæg. Den første del er en htm side hvor jeg via javascript forsøger at fyre en event af i på en knap i aspx siden. Det er det jeg ikke kan får til at virke.
Avatar billede badal Nybegynder
04. januar 2005 - 21:20 #4
Jeg skal på en eller anden måde have tilføjet et stump kode i denne funktion så den kan kalde en event i aspx siden.
function buttonSend()
{
  __doPostBack('Button1','');
}
Avatar billede snepnet Nybegynder
04. januar 2005 - 22:21 #5
Og dette her er ikke godt nok eller ?

<script language="javascript">
function ClickIt(clientId)
{
    window.dialogArguments.document.getElementById(clientId).click();
    window.close();
}
</script>       

Ovenstående kræver så, at du har åbnet vinduet med stort set det samme som jeg sendte tidligere :

private void Page_Load(object sender, System.EventArgs e)
{
    Button btn = new Button();
    btn.Click += new EventHandler(btn_Click);
    Form1.Controls.Add(btn);

    Label l = new Label();
    l.Text = "Open window";
    l.Attributes.Add("onclick","window.showModalDialog('lookup.aspx?OpenerButtonId=" + btn.ClientID + "', self, 'status:no; center:no;');");
    Form1.Controls.Add(l);
}

det trykker på knappen på den side du har åbnet din modalDialog fra... er det ikke det du vil ?

den knap der bliver trykket på, er den der bliver genereret her :
// page_load på en "opener" side :
protected HtmlForm Form1;

private void Page_Load(object sender, System.EventArgs e)
{
    Button btn = new Button();
    btn.Click += new EventHandler(btn_Click);
    Form1.Controls.Add(btn);

    Label l = new Label();
    l.Text = "Open window";
    l.Attributes.Add("onclick","window.open('lookup.aspx?OpenerButtonId=" + btn.ClientID + "');");
    Form1.Controls.Add(l);
}

Jeg har bare sat kontrollerne ind fra min code-behind, men det behøver du jo ikke gøre.

mvh
Avatar billede badal Nybegynder
04. januar 2005 - 22:28 #6
jo det er egentlig det jeg gerne vil men grunden til at jeg ikke ville benytte "click()" er at den af en eller årsag ikke virker efter en windows-opdatering. Går ud fra det er et eller andet sikkerhedrelateret der sørger for at blokere for klikket. Det har virket tidligere. Derfor var jeg igang med at finde alternativer så jeg undgik at benytte click() funktionen.
Avatar billede snepnet Nybegynder
04. januar 2005 - 22:29 #7
jamen dog ... er det en servicepack 2 ting ?
Avatar billede badal Nybegynder
04. januar 2005 - 22:30 #8
Ja det er det. Maskinen er opdateret med det nyeste opdateringer fra MS
Avatar billede snepnet Nybegynder
04. januar 2005 - 22:34 #9
trist.... du kunne måske så lave en location.href = 'xxx' - og så smide en besked til serveren med der.

fx. window.dialogArguments.document.location = window.dialogArguments.document.location + '?ActionParam=blahblah'

og så reagere på det i din codebehind til openersiden.

kunne det være en løsning ?

mvh
Avatar billede badal Nybegynder
04. januar 2005 - 22:43 #10
ja det kan det muligvis godt. Kan jeg får fat i "ActionParam" i Codebehind på følgende måde: Request["ActionParam"].ToString() ??

jeg havde også tænkt på denne mulighed :
window.dialogArguments.document.__doPostBack('Button1','');

Men jeg er ikke helt klar over om det kan lade sig gøre på denne måde
Avatar billede snepnet Nybegynder
04. januar 2005 - 22:59 #11
Jeg synes den nemmeste måde er at lave en property til det - fx.:

protected string ActionParam
{
    get{return Request.QueryString["ActionParam"];}
}

det er normalt ikke anbefalelsesværdig at kalde __doPostBack direkte, men du kan godt gøre det (med mindre der er noget i servicepack2 der forhindrer det) - du skal dog nok ikke gå på document, men bare :

window.dialogArguments.document.__doPostBack(eventTarget,eventArgument);

mvh
Avatar billede badal Nybegynder
05. januar 2005 - 20:11 #12
jeg kunne godt bruge window.dialogArguments.document.location = window.dialogArguments.document.location + '?ActionParam=blahblah'
da den lavede et postback og jeg kunne derefter bruge actionparam variablen.

snepnet...Hvis du  kommer med et svar så giver jeg point
Avatar billede snepnet Nybegynder
09. januar 2005 - 03:02 #13
hov - sorry. havde ikke set det sidste du skrev. et svar skal du få :o)
mvh
Avatar billede badal Nybegynder
10. januar 2005 - 22:18 #14
Det er helt iorden :)
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