Avatar billede maxmuldjord Nybegynder
21. september 2004 - 09:32 Der er 9 kommentarer og
1 løsning

hvordan kommer jeg videre - iframe?

Hej exp

Jeg har kæmpet mig frem til en MEGET simpel chat i C# I kan se den her http://empty-site.org/chat.aspx men hvordan får jeg mit "chatfelt" til at opdatere uden at skulle opdatere siden med refresh hvert 10.sek?. Kan jeg uden videre sætte en iframe uden om feltet og refreshe dette? I givet fald hvordan skal jeg så gribe den an? Jeg har lavet det i Webmatrix. Jeg ville gerne at den laver en submit når man trykker på enter også, jeg kan ikke finde noget i properties der skulle virke, der er godt nok et felt der hedder AccessKey men jeg er ikke sikker på at det er den.
Min C# kode ser ud som følger:

void btnPost_Click(object Sender, EventArgs e)
{
  string tab = "\t";
  string newline = "\r";
  string newMessage = txtName.Text + ":" + tab + txtMessage.Text + newline + Application["ChatLog"];

  if (newMessage.Length > 500)
  {
    newMessage = newMessage.Substring(0,499);
  }


  Application["ChatLog"] = newMessage;

  txtChatBox.Text = (string)Application["ChatLog"];
  txtMessage.Text = "";

}

void Page_Load()
{
  txtChatBox.Text = (string)Application["ChatLog"];
}

void btnClearLog_Click(object sender, EventArgs e)
{
  Application["ChatLog"] = "";
  txtChatBox.Text = (string)Application["ChatLog"];

}
Avatar billede snepnet Nybegynder
21. september 2004 - 19:53 #1
Jamen her var det jo :o)

AccessKey er fin nok... det du skriver der vil virke som genvej når du bruger ALT.
Altså AccessKey = "b" medfører at du kan holde ALT nede, og trykke på b for at aktivere.

Du kan trixe den med enterknappen sådan her :

<body onkeydown="if(event.keyCode == 13){document.getElementById('btnSubmit').click();}">

Og det kræver så at du har sådan en knap her på siden :

<asp:Button id="btnSubmit" runat="server" Text="Submit"></asp:Button>

mvh
Avatar billede maxmuldjord Nybegynder
21. september 2004 - 20:07 #2
ok, tak, jo jeg har min knap som du skriver! Den kode du angiver skal jeg have den i HTML delen eller i kode delen? Når nu min "chatbox" er txtChatbox og jeg vil skrive et JS der reloader den (for at undgå det klik der kommer når man reloader en side eller frame)kan jeg så bruge object reload eller noget i den stil? Men smid bare et svar når nu vi er igang du har så rigeligt fortjent de par point
Avatar billede snepnet Nybegynder
21. september 2004 - 20:22 #3
Denne her kan du bare skrive direkte i din aspx-fil, men du kan også tilgå den programmatisk.
Det nemmeste (hvis du vil gøre det) er, at du angiver din <body> i aspx-filen på denne måde :
<body id="Body" runat="server">

Så kan du i din kode lave denne dekleration :

protected HtmlGenericControl Body;

så kan du fyre scriptet på f.eks. sådan her :

Body.Attributes.Add("onload","if(event.keyCode == 13){document.getElementById('btnSubmit').click();}");

Du kan ikke sådan lige umiddelbart få reloaded en enkelt kontrol. Den du er inde på med en iframe kunne godt være en løsning, og der er også den lidt frækkere, hvor du sørger for at det sker i baggrunden, men den er sådan lidt mere langhåret.

mvh
Avatar billede snepnet Nybegynder
21. september 2004 - 20:22 #4
hov - og et svar :o)
Avatar billede maxmuldjord Nybegynder
21. september 2004 - 20:29 #5
ok, jeg prøver, tak for hjælpen!
Avatar billede snepnet Nybegynder
22. september 2004 - 01:07 #6
velbekomme.... du kan lige få et (meget lille, og meget ubrueligt) eksempel på en bag-om-ryggen-opdatering (det jeg skrev om tidligere).

du kan muligvis få lidt idéer af det, men det kan ikke bruges til noget direkte (f.eks. bliver det der indtastes ikke sendt tilbage til serveren :o)

Men... "chatten" bliver opdateret for hvert 3 sekund uden postback - så du kan måske bruge det til lidt inspiration, og du kan også selv smide beskeder ind på den ved at skrive noget, og trykke enter.

(selve siden "chatten" er på er bare lavet med html-kontroller, men du har jo siden i forvejen, og det er clientside koden der er det interessante).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Front</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" type="text/javascript">
       
        var targetUrl = "Back.aspx";
       
        function updateChat(userid)
        {           
            window.status="henter meddelelser på " + targetUrl;
           
            var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");                                   
            xmlHttp.open( "POST", targetUrl, false);
            xmlHttp.send();       
           
            var res = xmlHttp.responseText;
           
            document.getElementById('txtChatBox').value += (res + "\n");
                       
            window.status = "meddelelser hentet";
        }
       
        function start()
        {
            updateChat();
            setTimeout ("start()",2500);
        }
       
        function addMessage()
        {
            var typedMessageBox = document.getElementById('txtMessage');
            var typedMessage = typedMessageBox.value;           
            if(typedMessage.length > 0)
            {
                document.getElementById('txtChatBox').value += ("> " + typedMessage + "\n");
                typedMessageBox.value = "";
            }       
        }       
        </SCRIPT>
    </HEAD>
    <body onkeydown="if(event.keyCode == 13){document.getElementById('btnSubmit').click();return false;}" onload="document.getElementById('txtMessage').focus();start();">
        <form id="Form1" method="post" runat="server">
            <P><TEXTAREA id="txtChatBox" runat="server" cols="40" rows="30"></TEXTAREA></P>
            <P><INPUT id="txtMessage" style="WIDTH: 296px; HEIGHT: 22px" type="text" size="44"><INPUT id="btnSubmit" type="button" value="Button" onclick="addMessage();"></P>
        </form>
    </body>
</HTML>

Som du kan se af nedenstående to linier, bliver der kaldt en anden aspx-side (Back.aspx).
var targetUrl = "Back.aspx";
xmlHttp.open( "POST", targetUrl, false);

Den ser ud som følger :

<%@ Page Language="C#" %>
<script runat="server">   
    void Page_Load(object sender, EventArgs e) {
        Response.Write("< Klokken er nu " + DateTime.Now.ToString());
    }

</script>

Det den sender tilbage, bliver så proppet ind i "chatten", og du vil ikke se noget postback.
Årsagen til at alt html-en skulle slettes fra "back-formen" er, at det ville komme med tilbage til klienten, og bliver proppet ind i tekstboksen.

Håber du kan bruge det til et eller andet :o)

mvh
Avatar billede maxmuldjord Nybegynder
22. september 2004 - 20:07 #7
Jeg prøvede at kyle min chatbox i en iframe til at begynde med men nu kan den ikke finde min txtChatbox fórdi den ligger i en anden fil,hvordan skære jeg den pølse? min C# kode :

void btnPost_Click(object Sender, EventArgs e)
{
  string tab = "\t";
  string newline = "\r";
  string newMessage = txtName.Text + ":" + tab + txtMessage.Text + newline + Application["ChatLog"];

  if (newMessage.Length > 500)
  {
    newMessage = newMessage.Substring(0,499);
  }


  Application["ChatLog"] = newMessage;

  txtChatBox.Text = (string)Application["ChatLog"];
  txtMessage.Text = "";

}

void Page_Load()
{
  txtChatBox.Text = (string)Application["ChatLog"];
}

void btnClearLog_Click(object sender, EventArgs e)
{
  Application["ChatLog"] = "";
  txtChatBox.Text = (string)Application["ChatLog"];

}
min html

<html>
<head>
    <link id="css" href='<%= Session["SelectedCss"] %>' type="text/css" rel="stylesheet" />
</head>
<body>
    <form runat="server">
        <h1>Tommy's Chat for Chatoholics
        </h1>
        <h2>Online Chat
        </h2>
        <iframe src="chatbox.aspx" width="550px" height="200px"><iframe>
        <br />
        <br />
        <table width="550">
            <tbody>
                <tr>
                    <td width="150">
                        Enter your name:
                    </td>
                    <td>
                        <asp:TextBox id="txtName" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td width="150">
                        Enter your message:
                    </td>
                    <td>
                        <asp:TextBox id="txtMessage" runat="server" Width="402px" MaxLength="100"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td>
                        &nbsp;
                    </td>
                    <td>
                        <asp:Button id="btnPost" onclick="btnPost_Click" runat="server" Text="Post message"></asp:Button>
                        <asp:Button id="btnClearLog" onclick="btnClearLog_Click" runat="server" Text="Clear log"></asp:Button>
                    </td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>
min chatbox.aspx

<html>
<head>
    <title>chatboks</title> <script type="text/javascript">
window.onload = function(){ setTimeout('location.reload(true)',10000) }
</script>
</head>
<body>
    <asp:TextBox id="txtChatBox" TextMode="MultiLine" Height="200px" Width="550px" ReadOnly="True" runat="server"></asp:TextBox>
</body>
</html>
Avatar billede snepnet Nybegynder
22. september 2004 - 20:12 #8
hej "max". der er ikke som sådan understøttelse af iframes i asp.net, så du har ikke mulighed for at styre den slags på serveren.
hvis du fra fin "faste" siden vil skrive til din iframe, skal du gøre det clientside.

men... der er sådan set heller ikke nogen grund til at det ligger i en iframe, hvis du bruger en model som den jeg sendte... så bliver det jo opdateret uden postback alligevel.
(du kan jo sagtens skrive til back-siden hvis du vil.... f.eks. back.aspx?newMessage=<indhold fra tekstboksen>)

Så bliver den jo bare fyret over fra scriptet, og kan samles op på serveren.

mvh
Avatar billede maxmuldjord Nybegynder
22. september 2004 - 20:35 #9
ok, jeg prøver om jeg kan få hoved og hale på din metode så. Problemet er bare at jeg ikke har så meget hår tilbage jeg kan hive ud!

Men forsøger

8>)
Avatar billede snepnet Nybegynder
22. september 2004 - 20:51 #10
hehe - du må tage en hat på :o)
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