<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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" language ="javascript" >
function CallServerFunction(selectInfo,Num1,Num2)
{
//Arg是传向后台方法RaiseCallbackEvent()的参数,这里将操作符操作数一块传过去
Arg = selectInfo.selectedIndex + "/" + Num1.value + "/" + Num2.value;
//获取一个客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调
<%= ClientScript.GetCallbackEventReference(this,"Arg","ReceiveServerData","null") %>
}
//接收回调后台传过来的结果数据,该函数名为GetCallbackEventReference()的第三个参数
function ReceiveServerData(result)
{
//js里面,必须用Label的innerText属性,用Text属性不会产生任何效果
lblShow.innerText = result;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type = "text" id="Num1" />
<select id="Oper" runat = "server">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select>
<input type = "text" id="Num2" />
<%--调用回调函数的控件必须是HTML控件,不能为服务端控件--%>
<input type= "Button" id ="eq" value = "=" onclick = "CallServerFunction(Oper,Num1,Num2)"/>
<asp:Label ID="lblShow" runat="server" Text="show"></asp:Label>
</div>
</form>
</body>
</html>
using System;
using System.Data;
using System.Configuration;
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;
/**//*
* 对ICallbackEventHandler接口进行声明,要在客户端调用服务端代码而不回发,必须声明该接口并且实现它的两个方法:
* RaiseCallbackEvent()、GetCallbackResult()
* RaiseCallbackEvent()的参数是从前台传过来的,根据传来的参数执行不同的代码并将结果用GetCallbackResult()返回前台
*/
//必须声明System.Web.UI.ICallbackEventHandler接口
public partial class _Default : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
{
//定义一个回调的返回值
private string Result;
//定义两个变量,用来接收页面传过来到操作数
private string Num1;
private string Num2;
protected void Page_Load(object sender, EventArgs e)
{
}
/**//// <summary>
/// 该方法是回调执行的方法,根据参数在这个方法中处理回调的内容,该方法没有返回值
/// </summary>
/// <param name="eventArgument">此参数是从客户端传过来的</param>
public void RaiseCallbackEvent(string eventArgument)
{
//eventArgumeng 为javascript从客户端传递的参数,本例传过来三个参数用“/”分割将每个参数取出存入数组
string[] PagParams = eventArgument.Split('/');
Num1 = PagParams[1];
Num2 = PagParams[2];
//根据第一个参数(所选的操作符),调用不同的执行函数
switch (PagParams[0])
{
case "0":
Result = add(); break;
case "1":
Result = sub(); break;
case "2":
Result = multi(); break;
case "3":
Result = division(); break;
}
}
/**//// <summary>
/// 该方法是返回回调的结果给客户端
/// </summary>
/// <returns></returns>
public string GetCallbackResult()
{
return Result;
}
//一下四个函数是通过RaiseCallbackEvent方法,调用的回调要执行操作的函数
private string add()
{
double addResult = double.Parse(Num1) + double.Parse(Num2);
return addResult.ToString();
}
private string sub()
{
double addResult = double.Parse(Num1) - double.Parse(Num2);
return addResult.ToString();
}
private string multi()
{
double addResult = double.Parse(Num1) * double.Parse(Num2);
return addResult.ToString();
}
private string division()
{
double addresult = double.Parse(Num1) / double.Parse(Num2);
return addresult.ToString();
}
}
| 欢迎光临 站长论坛 (https://www.tzlink.com/bbs/) | Powered by Discuz! X3.2 |