1、C#实现前台与后台方法互调实例代码
前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JavaScript get Net Function.aspx.cs" Inherits="JavaScript_get_Net_Function" %>
<!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>
<%--
JavaScript异步调用定义在ASP.Net页面中的方法, 我们需要:
1.将该方法声明为公有(public);
2.将该方法声明为类方法(C#中的static,VB.NET中的Shared),而不是实例方法;
3.将该方法添加【WebMethod】属性
4.将页面中ScriptManager控件的EnablePageMethods属性设置为true;
5.在客户端使用如下JavaScript语法调用该页面方法
PageMethods.[MethodName](param1,param2,...,callbackFunction);
6.为客户端异步调用指定回调函数,在回调函数中接受返回值并进一步处理;
7.添加 using System.Web.Services;
--%>
<%--
ASP.Net后台调用JavaScript function的方法,我们要注意:
1.尽量少用Response.Write(< script>< /script>);这种方法,它会影响CSS导致页面效果偏差
2.C#中使用ScriptManager.RegisterStartupScript(this, this.GetType(), "edit", "JS('"+param1+"','"+param2+"')", true);
3.添加 using System.Web.UI;
--%>
<script type="text/javascript">
/*-------------JavaScript调用.Net后台Start----------------------------------*/
function JsCallCSharp(param1)
{
PageMethods.SayHelloFromPage(param1,onSayHelloSucceeded);
}
function onSayHelloSucceeded(result)
{
alert(result);
}
/*-------------JavaScript调用.Net后台End----------------------------------*/
/*-------------.Net调用JavaScript Start-----------------------------------*/
function CSharpCallJs(param1,param2)
{
alert(param1 + param2);
}
/*-------------.Net调用JavaScript Start-----------------------------------*/
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" runat="server" />
</div>
<asp:Button ID="Button1" οnclick="Button1_Click" OnClientClick="JsCallCSharp('takako');" runat="server" Text="Button1" />
</form>
</body>
</html>
后台代码
using System;
using System.Web.Services;
using System.Web.UI;
public partial class JavaScript_get_Net_Function : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string param1 = "你好:";
string param2 = "takako_mu";
ScriptManager.RegisterStartupScript(this, this.GetType(), "edit", "CSharpCallJs('" + param1 + "','" + param2 + "');", true);
}
[WebMethod]
public static string SayHelloFromPage(string name)
{
return string.Format("Hello {0}!", name);
}
}
2、JS与CS互访
转自http://hi.baidu.com/wangningke123/blog/item/317f014f0877d0eed62afc7e.html
.如何在JavaScript访问C#函数? 问题1答案如下: (若想让Button1在页面上不显示,则嵌套一个div 显示设置成不显示,不能使用visable=false,因为用visable=false时,getElementById可能找不到Button1) <script type="text/javascript"> <a id="div1" href="#" οnclick="Bind()">无刷新更改 隐藏的button触发</a> 方法二:1、函数声明为public 方法四: <script language="javascript" > <INPUT οnkeypress="SubmitKeyClick()" id="aaa" type="text" > 在.CS里有: public void enter() 问题2.如何在JavaScript访问C#变量?
答案如下: 方法一:推荐使用控件 使用 方法二:可以用cookie或session
|
3、使用AJAX直接调用后台方法
前台代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="AJAX1._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>Untitled Page</title>
<script type="text/javascript">
function btnClick(){
// 调用页面后台方法,前面跟方法所需的参数,接着是方法回调成功时要执行的js函数,最后一个是方法回调失败时要执行的js函数
PageMethods.Hello("you",funReady,funError);
}
// result 就是后台方法返回的数据
function funReady(result){
alert(result);
}
// err 就是后台方法返回的错误信息
function funError(err){
alert("Error:" + err._message );
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
下面要加上EnablePageMethods="true"属性,才能使用后台方法
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<input type="button" οnclick="btnClick();" value="test" />
</div>
</form>
</body>
</html>
后台代码:
namespace AJAX1
{
public partial class _Default : System.Web.UI.Page
{
// 需要标识为WebMethod
[System.Web.Services.WebMethod]
// 注意,要让前台调用的方法,一定要是public和static的
public static string Hello(string name)
{
return "Hello:" + name;
}
}
}