ho fatto delle prove, come questa, per esempio:
pagina:
codice:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="semplice_ajax_1.aspx.vb" Inherits="CorsoApogeo_ajax_semplice_ajax_semplice_ajax_1" %>
<!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>Pagina senza titolo</title>
<link href="../../../stili/Styles.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../../../js/ajax.js"></script>
<script language="javascript" type="text/javascript">
// <!CDATA[
//non utilizzo la funzione crea_parametri
function a1_onclick(v)
{
var parametri = $("__EVENTTARGET").name + "=" + v.id
+ "&" + $("__EVENTARGUMENT").name + "=" + ""
+ "&" + $("__VIEWSTATE").name + "=" + encodeURIComponent($("__VIEWSTATE").value)
+ "&" + $("__EVENTVALIDATION").name + "=" + encodeURIComponent($("__EVENTVALIDATION").value);
parametri += "&" + $("Text1").name + "=" + encodeURIComponent($("Text1").value);
ajax("?", onload, parametri);
function onload()
{
var t = this.request.responseText;
//var tx = this.request.responseXML;
$("div1").innerHTML = t;
}
}
// ]]>
</script>
</head>
<body>
<form id="form1" runat="server">
<input id="Text1" type="text" name="Text1" style="width: 448px;border:1px black solid;" value="v1=1&v2=1+2" />
Richiama data server tramite ajax
<div id="div1"></div>
</form>
</body>
</html>
codice:
codice:
Option Strict On
Partial Class CorsoApogeo_ajax_semplice_ajax_semplice_ajax_1
Inherits System.Web.UI.Page
Protected Sub a1_ServerClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles a1.ServerClick
'Me.Response.Write(DateTime.Now.ToString())
Me.Response.Write("Me.IsPostBack = " & Me.IsPostBack & ", " & DateTime.Now.ToString())
Me.Response.Write("
")
Me.Response.Write(libreria.getForms())
Me.Response.End()
End Sub
Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
Dim ex As Exception = Server.GetLastError()
Me.Response.Write(ex.Message)
Me.Response.End()
End Sub
End Class
qualche spiegazione:
la pagina ha il link a1 runat server. Al click parte l'evento a1_onclick che fa la richiesta al server tramite chiamata ajax in modalità post. Oltre ad inviare il testo in Text1, invio pure gli hidden nascosti, __EVENTTARGET, __EVENTARGUMENT, __VIEWSTATE, __EVENTVALIDATION.
Il server fa partire correttamente l'evento a1_ServerClick e restituisce al chiamante:
IsPostBack
DateTime.Now.ToString(),
getForms() ->listato dei parametri form ricevuti, per assicurarmi che vengano ricevuti
Sembra che funzioni, però, detto tra me e te, non lo uso mai. Uso sempre il modo antico, ossia ricavo i parametri form ricevuti e li uso come voglio.
In pratica richiamo da client la pagina con una sintassi simile:
pagina.aspx?comando_ajax=recupera_dati
nel server recupero il parametro comando_ajax, lo valuto e proseguo, più o meno come hai scritto tu nella prima parte. Funziona sempre e lascia molta più libertà.