Avatar billede mosquito Nybegynder
23. marts 2006 - 18:09 Der er 15 kommentarer og
1 løsning

RegisterClientScriptBlock giver fejl hvis det er i codebehind

Codebehind TestSite.aspx.cs:

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;

public partial class TestSite : System.Web.UI.Page
{
  const string script = @"
  <script language='javascript' type='text/javascript'>
    function SayHello(x)
    {
      alert(x);
    }
  </script>";

protected void Page_Load(object sender, EventArgs e)
  {
    ClientScript.RegisterClientScriptBlock(GetType(), "SayHello", script);
  }
}

HTML TestSite.aspx:

<head runat="server">
  <title></title>
</head>
  <body>
  <form id="test" runat="server">
    <div>
      <asp:Button ID="Button1" runat="server"
          OnClientClick='SayHello("Are you from Planet Earth?");'
          Text="Button" />
    </div>
  </form>
  </body>
</html>


Flytter jeg mit script til <head> section, fungerer det fint, hvis jeg bruger følgende i aspx.cs:

ClientScript.RegisterClientScriptBlock(GetType(), "SayHello",
"return SayHello('Så ka do lære det!!')");

Hvad gør jeg galt??
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 18:15 #1
det kan være fordi du ikke tjekker om blokken allerede er registreret:

if ( !ClientScript.IsClientScriptBlockRegistered( "SayHello" ) )
{
  ...
}
Avatar billede mosquito Nybegynder
23. marts 2006 - 18:28 #2
dj_uncas: nope. Det var desværre ikke løsningen. Resultatet er det samme. Når jeg debugger får jeg fejl i følgende linie:

<input type="submit" name="Button1" value="Button" onclick="SayHello(&quot;'Så ka do lære det!!?&quot;);" id="Button1" />
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 18:30 #3
Hvad for en fejl får du?
Avatar billede mosquito Nybegynder
23. marts 2006 - 18:45 #4
error: Et objekt var ventet
Avatar billede jens_klinting Nybegynder
23. marts 2006 - 19:02 #5
Jeg tror det er dine anførselstegn i aspx'en, den er gal med. Prøv at erstatte

<asp:Button ID="Button1" runat="server"
  OnClientClick='SayHello("Are you from Planet Earth?");'
  Text="Button" />

med

<asp:Button ID="Button1" runat="server"
  OnClientClick="SayHello('Are you from Planet Earth?');"
  Text="Button" />

// Jens
Avatar billede mosquito Nybegynder
23. marts 2006 - 19:56 #6
--> jens: Desværre, jeg har prøvet... samme resultat
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 21:15 #7
Er det en javascript fejl? Hvis ikke skal jeg nok have lidt mere info om fejlen..

Jeg prøvede lige at kopiere din kode og køre det, og det virkede fint hos mig...
Avatar billede mosquito Nybegynder
23. marts 2006 - 21:23 #8
jeg får også koden til at fungere fint, når scriptet indlejres i aspx siden. Men ikke når scriptet er en Const string i codebehind filen. Egentlig skulle der ikke være nogen forskel, men jeg får en script fejl, når den bruges i sidstnævnte. Mystsisk.. måske??
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 21:29 #9
Jeg prøvede også at have dit script i en const string i aspx.cs codefilen, men det virker stadig fint. og jeg har bare copy/pasted det der stod i dit første indlæg fuldstændig ukritisk..

Hvis vi skal komme det nærmere må jeg lige stille nogle spørgsmål:
- Hvilken browser bruge du (type og version)?
- Jeg går ud fra at der er noget i html'en før <head> tagget?
- Har du indstillet din browser til at blokere javascript?
Avatar billede mosquito Nybegynder
23. marts 2006 - 21:48 #10
pkt. 1: min browser er IE7.0.5296.0
pkt. 2:
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="TestSite.aspx.cs" Inherits="TestSite"
    Trace="false" %>
pkt. 3: nope, ellers ville jeg heller ikke kunne afvikle script fra aspx siden.

måske det ligger i browseren. Det er trods alt en beta version
<!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">
Avatar billede mosquito Nybegynder
23. marts 2006 - 21:49 #11
ups. det blev vist lidt blandet.

pkt. 2:
<%@ Page Language="C#" AutoEventWireup="false" CodeFile="TestSite.aspx.cs" Inherits="TestSite"
    Trace="false" %>

<!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></title>
</head>
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 21:55 #12
Aha, der har vi den! Du har sat AutoEventWireup="false". Sæt den til true og du er kørende...

Hvis du har AutoEventWireup=false skal du selv eksplicit sætte Page_Load metoden på som eventhandler til Load event'en på siden:

private void InitializeComponent()
{
    this.Load += new EventHandler( Page_Load );
}


ps. Jeg kan fortælle dig at det virker i IE 7 også, jeg har den nemlig også ;-)
Men de har vel heller ikke ændret noget ved javascript motoren?
Avatar billede mosquito Nybegynder
23. marts 2006 - 21:59 #13
se så.. tak ska ha' :-) nej vi må formode at der ikke er sket noget med js engine, men det kunne jo også være andet. Men takker for hjælpen. Smid et svar, point er velfortjent ;-)
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 22:01 #14
Kommer her!

Har du selv sat AutoEventWireup til false? Jeg mener da at Visual Studio 2005 default sætter den til true, hvis det er det du bruger?
Avatar billede mosquito Nybegynder
23. marts 2006 - 22:08 #15
jo, jeg havde selv sat den, i en anden forbindelse, da det er en test.aspx jeg bruger til at teste forskelligt på, men havde overset den. Og jo jeg bruger VS2005 og den sætter som default AutoEventWireup til 'true'.

Men som en klog mand engang sagde... Den der er ingen fejl laver, laver ingenting ;-)
Avatar billede dj_uncas Nybegynder
23. marts 2006 - 22:11 #16
true dat! :-D
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