Avatar billede Klaus_S Praktikant
18. maj 2010 - 15:37 Der er 6 kommentarer og
1 løsning

ASP.NET Ajax client-side framework failed to load.

Hej eksperter.

Jeg har prøvet at lave ne online chat efter dette eksempel:
http://www.junnark.com/Articles/Build-a-Web-Chat-Application-Using-ASP-Net-LINQ-and-AJAX-VB.aspx

men har problemer ved brug af upload panel.
Når siden loader indeholder den denne fejl.
Den kommer når jeg bruger scriptmanager og updatepanel

//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>

fejlen kommer både når jeg kører det fra vs2008 og når den kører på surftown webhotel.
samtidig fryser update 5 sekunder når timeren har eksekveret koden og jeg skal sætter focus på min tekstboks. Dette sker ikke hvis jeg ikke bruger updatepanel men ville gerne at det kun var chatboksen der blev opdateret.

Har lavet eksemplel på www.uniformdating.dk/test.
Der kan man vælge 2 undersider hvis eneste forskel at den ene er med updatepanel og den anden uden.

.Her er koden på siden med updatepanel

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="_Default2" %>

<!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>
      <script type="text/javascript">

          function SetScrollPosition() {
              var div = document.getElementById('divMessages');
              div.scrollTop = 100000000000;
          }   
    function SetToEnd(txtMessage)
        {                   
            if (txtMessage.createTextRange)
            {
                var fieldRange = txtMessage.createTextRange();
                fieldRange.moveStart('character', txtMessage.value.length);
                fieldRange.collapse();
                fieldRange.select();
            }
        }
             
        function ReplaceChars()
        {
            var txt = document.getElementById('txtMessage').value;
            var out = "<"; // replace this
            var add = "?"; // with this
            var temp = "" + txt; // temporary holder

            while (temp.indexOf(out)>-1)
            {
                pos= temp.indexOf(out);
                temp = "" + (temp.substring(0, pos) + add +
                temp.substring((pos + out.length), temp.length));
            }
           
            document.getElementById('txtMessage').value = temp;
        }
   
      </script>
      <style type="text/css">
        .style1
        {
            height: 300px;
            width: 501px;
        }
        .style2
        {
            width: 500px;
        }
        .style3
        {
            width: 23px;
        }
        </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <asp:Label ID="Label1" runat="server" Text="Testside uden UpdatePanel"></asp:Label>
        <br />
        <asp:Timer ID="Timer1" runat="server" Interval="7000">
        </asp:Timer>
         
     
              <div id="divMessages"
                                style="border: 1px solid Black; background-color: White; font-size: 11px; padding: 4px 4px 4px 4px;overflow-y:scroll;"
                                class="style1">
                                <asp:Literal Id="litMessages" runat="server" />
                            </div>
                <br />
                <asp:TextBox ID="txtMessage" runat="server" MaxLength="100"
                    onfocus="SetToEnd(this)" onkeyup="ReplaceChars()" Width="424px" />
                <asp:Button ID="btnSend" runat="server" OnClick="BtnSend_Click"
                    OnClientClick="SetScrollPosition()" Text="Send" />
 
    </div>
    </form>
</body>
</html>


her er VB siden uden connectionstring

Imports MySql.Data.MySqlClient
Imports System.Data
Partial Class _Default2
    Inherits System.Web.UI.Page

    Public DBstr As String = ""

    Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        GetMessages()
        ScriptManager1.SetFocus(txtMessage.ClientID)
    End Sub

    Protected Sub BtnSend_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSend.Click

        If txtMessage.Text.Length > 0 Then
            'indsætter chat meddelse i chattabel

            InsertMessage()
            GetMessages()
            txtMessage.Text = String.Empty
            ScriptManager1.SetFocus(txtMessage.ClientID)
        Else
            GetMessages()
            txtMessage.Text = String.Empty
            ScriptManager1.SetFocus(txtMessage.ClientID)
        End If
    End Sub


    Public Sub InsertMessage()
        Using MyConn As MySqlConnection = New MySqlConnection(DBstr)
            Using Cmd As MySqlCommand = New MySqlCommand("A_InsertChatmsg", MyConn)
                Cmd.CommandType = Data.CommandType.StoredProcedure
                Cmd.Parameters.Add(New MySqlParameter("msg", txtMessage.Text))
                MyConn.Open()
                Cmd.Connection = MyConn
                Cmd.ExecuteNonQuery()
                MyConn.Close()
            End Using
        End Using
    End Sub

    Public Sub GetMessages()
        Dim msglist As New DataView
        Using MyConn As New MySqlConnection(DBstr)
            Using Cmd As MySqlCommand = New MySqlCommand("A_Getmsg", MyConn)
                With Cmd
                    .CommandType = CommandType.StoredProcedure
                End With
                Using MySqlDA As New MySqlDataAdapter(Cmd)
                    Using MyDS As New DataSet
                        MyDS.Clear()
                        MySqlDA.Fill(MyDS, "messages")
                        Dim MyDataView As DataView = New DataView

                        msglist.Table = MyDS.Tables("messages")
                    End Using
                End Using
            End Using
        End Using

        If Not msglist Is Nothing Then
            Dim sb As StringBuilder = New StringBuilder()
            Dim ctr As Integer = 0    ' toggle counter for alternating color

            For i = 0 To msglist.Table.Rows.Count - 1
                'sb = New StringBuilder
                Dim FV_Row As DataRow = msglist.Item(i).Row
                Dim txt As String = FV_Row.Item(1).ToString
                Dim msgtime As DateTime = FV_Row.Item(2).ToString
                Dim msgtime1 As TimeSpan
                msgtime1 = msgtime.TimeOfDay
                ' alternate background color on messages
                If ctr = 0 Then
                    sb.Append("<div style='padding: 10px; color: black;'>")
                    ctr = 1
                Else
                    sb.Append("<div style='background-color: #EFEFEF; color: white; padding: 10px;'>")
                    ctr = 0
                End If
                sb.Append("" & msgtime1.ToString & " " & txt & "</div>")
            Next
            litMessages.Text = sb.ToString()
        End If

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        GetMessages()
    End Sub
End Class


Håber nogen kan hjælpe. Har skrallet alt væk på de 2 testsider og er overbevist om at de må ha noget at gøre med den fejl der er når siden loades.

PS. Den rigtige chat er selvfølgelig mere omfattende men har lavet dette som eksempel for dette spørgsmål


hilsen Klaus
Avatar billede jokkejensen Novice
18. maj 2010 - 16:20 #1
1: der er ingen asp:updatepanel i ovenstående eksempel.
2: i ie8 og nyere version af FF, virker det "fint"
3: Køb fri trafik til på den server :), den chat æder en del, hvis man forestiller sig flere hundrede brugere :)
Avatar billede Klaus_S Praktikant
18. maj 2010 - 16:49 #2
1: Sorry det var testsiden uden updatepanel.
Her er den med:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default1.aspx.vb" Inherits="_Default1" %>






<!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>
      <script type="text/javascript">

          function SetScrollPosition() {
              var div = document.getElementById('divMessages');
              div.scrollTop = 100000000000;
          }   
    function SetToEnd(txtMessage)
        {                   
            if (txtMessage.createTextRange)
            {
                var fieldRange = txtMessage.createTextRange();
                fieldRange.moveStart('character', txtMessage.value.length);
                fieldRange.collapse();
                fieldRange.select();
            }
        }
             
        function ReplaceChars()
        {
            var txt = document.getElementById('txtMessage').value;
            var out = "<"; // replace this
            var add = "?"; // with this
            var temp = "" + txt; // temporary holder

            while (temp.indexOf(out)>-1)
            {
                pos= temp.indexOf(out);
                temp = "" + (temp.substring(0, pos) + add +
                temp.substring((pos + out.length), temp.length));
            }
           
            document.getElementById('txtMessage').value = temp;
        }
   
      </script>
      <style type="text/css">
        .style1
        {
            height: 300px;
            width: 501px;
        }
        </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
        <asp:Label ID="Label1" runat="server" Text="Testside med UpdatePanel"></asp:Label>
        <br />
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
        <br />
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <br />
        <asp:Timer ID="Timer1" runat="server" Interval="7000">
        </asp:Timer>
          <asp:UpdatePanel Id="UpdatePanel1" runat="server">
            <Triggers>
                <asp:AsyncPostBackTrigger ControlId="Timer1" />
            </Triggers>
            <ContentTemplate>
     
              <div id="divMessages"
                                style="border: 1px solid Black; background-color: White; font-size: 11px; padding: 4px 4px 4px 4px;overflow-y:scroll;"
                                class="style1">
                                <asp:Literal Id="litMessages" runat="server" />
                            </div>
                <br />
                <asp:TextBox ID="txtMessage" runat="server" MaxLength="100"
                    onfocus="SetToEnd(this)" onkeyup="ReplaceChars()" Width="424px" />
                <asp:Button ID="btnSend" runat="server" OnClick="BtnSend_Click"
                    OnClientClick="SetScrollPosition()" Text="Send" />
    </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

2: Jeg bruger selv IE8 og her står fejlen i koden efter siden er loadet. Den side med updatepanel fryser i 4-5 sekunder hvis man skriver i teksboksen mens timer1 koden afvikles.
Det er ikke kun hos mig den gør det. har haft flere til at teste det

3: Det er også meningen nå jeg er helt færdig.

Hilsen Klaus
Avatar billede jokkejensen Novice
18. maj 2010 - 16:52 #3
bekræft lige du får JS fejl her :

http://www.uniformdating.dk/test/default1.aspx

Hverken min firebug, firefox console, eller IE8 brokker sig :/
Avatar billede Klaus_S Praktikant
18. maj 2010 - 17:06 #4
ja det er den side hvor textboks fryser i 4-5 sekunder efter min timer har eksekveret og hvis jeg vælger "Vis kilde" står ajax fejlen i kildefilen.

Er online på chatten så skriv der hvis det er
Avatar billede jokkejensen Novice
18. maj 2010 - 17:20 #5
<js>
document.getElementById("<%# IDPÅTEXTBOX.ClientID %>").setAttribute("autocomplete","off")
</js>

Page.DataBind()

/J
Avatar billede jokkejensen Novice
18. maj 2010 - 17:23 #6
textboxen flyttes uden for asp:updatepanel
Avatar billede Klaus_S Praktikant
18. maj 2010 - 17:35 #7
Super jokke. Mange tak for hjælpen og held og lykke med dit home projekt

Hilsen Klaus
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