ClientCallBack mit aspx-Seiten

17/03/2008 - 15:05 von Manfred Müller | Report spam
Hallo

Ich möchte Daten vom Server holen ohne dass die Seite neu aktualisiert wird.
Die Lösung dazu habe ich im Internet gefunden. Dies funktioniert wunderbar,
aber nur in normalen Html-Seiten.
Da ich aber ein ASP.Net-Projekt habe, arbeite ich mit aspx-Seiten. Hier
funktioniert der gleiche kleine Code nicht mehr. Es erscheint eine
Fehlermeldung „Fehler auf Seite: documentgetElementByld(…) ist null oder kein
Objekt“
Ich nehme an, irgendwie hat dies etwas mit „runat=server“ zu tun. Wie kann
ich nun dieses Javascript in einer aspx-Seite laufen lassen?

Normale Html-Seite (funktioniert): Bei Click auf den Button wird die
System-Zeit auf dem Server geholt und im Label angezeigt ohne dass die Seite
aktualisiert):

<%@ Page Language="VB" AutoEventWireup="false"
CodeFile="ClientCallback07.aspx.vb" Inherits="ClientCallBack07"
Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

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

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Sample Script Callback</title>
<script type="text/javascript">
function ReceiveServerData(arg, context)
{
document.getElementById('lblResults').innerText = arg;
}
</script>

</head>
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="Server Time"
onclick="CallServer('time','')" /><br />
<br />
<asp:Label ID="lblResults" runat="server" BorderColor="Maroon"
BorderWidth="1px" ForeColor="Red"
Width="232px"
meta:resourcekey="lblResultsResource1"></asp:Label><br />
</div>
</form>

</body>
</html>


Aspx-Seite (funktioniert nicht (Fehler auf Seite):

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master"
AutoEventWireup="false" CodeFile="ClientCallback08.aspx.vb"
Inherits="ClientCallback08" title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1"
Runat="Server">

<script type="text/javascript">
function ReceiveServerData(arg, context)
{
document.getElementById('lblResults').innerText = arg;
}
</script>

<input id="Button1" onclick="CallServer('time','')" type="button"
value="Server Time" /><br />
<br />
<asp:Label ID="lblResults" runat="server" BorderColor="Maroon"
BorderWidth="1px"
ForeColor="Red" meta:resourcekey="lblResultsResource1"
Width="232px"></asp:Label>
</asp:Content>


.vb-Code (Bei beiden gleich):
Partial Class ClientCallBack07
Inherits System.Web.UI.Page
Implements ICallbackEventHandler

Private _callbackArg As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load
Dim cm As ClientScriptManager = Page.ClientScript
Dim cbReference As String
cbReference = cm.GetCallbackEventReference(Me, "arg", _
"ReceiveServerData", "context")
Dim callbackScript As String
callbackScript = "function CallServer(arg, context)" & _
"{" & cbReference & "; }"
cm.RegisterClientScriptBlock(Me.GetType(), _
"CallServer", callbackScript, True)
End Sub
Public Sub RaiseCallbackEvent(ByVal eventArgument As String) _
Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
_callbackArg = eventArgument
End Sub
Public Function GetCallbackResult() As String _
Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
Select Case _callbackArg
Case "time"
Return My.Computer.Clock.LocalTime.ToString()
Case Else
Return _callbackArg
End Select
End Function
End Class

Danke für eure Hilfe

Manfred
 

Lesen sie die antworten

#1 Patrick Finger
17/03/2008 - 16:22 | Warnen spam
Hallo

Das liegt daran, dass die ID deines Labels in asp.net nicht mehr nur
"lblResults" heisst sondern irgendwie ContentPlaceHolder1_lblResults
oder so..

Lass Dir mal den html-Code der Seite im Browser anzeigen, dann findest
Du schnell heraus, wie das Label tatsàchlich heisst.

Alternativ kommst Du via Property ClientID an Die gesuchte ID..

irgend sowas: (ungetestet)
function ReceiveServerData(arg, context)
{
document.getElementById(<%= lblResults.ClientID %>).innerText = arg;
}
</script>



Gruss

Ähnliche fragen