转自:https://www.cnblogs.com/kinger906/p/3431842.html

除了下文讲的方式外,还有一种方式:html里面使用ajax写好提交方式和提交参数,然后以写一行带有.aspx文件格式的语句跳转到后台(以.config文件为桥梁跳转,其中会指定后台处理程序在哪里),直接到后台的handler里面去处理,会自动开始执行ProcessRequest等函数

下文来自:http://blog.csdn.net/wang379275614/article/details/17033981  

网站是围绕数据库来编程的,以数据库中的数据为中心,通过后台来操作这些数据,然后将数据传给前台来显示出来(当然可以将后台代码嵌入到前台)。即:

  

  下面就讲前台与后台进行数据交互的方法,分前台调用后台方法与变量;台调用前台js代码。本文先介绍前者,后者在后面文章中介绍。

前台调用后台方法与变量:

 

方法一:通过WebService来实现

步骤:

后台

Ø  首先引入命名空间(using System.Web.Services;)

Ø  然后定义公共的静态的方法(必须为public和static的,且静态方法不能访问外部的非静态变量,此时后台与前台相当于父类与子类的关系),并在该方法头部上加上[System.Web.Services.WebMethod],来标注方法特性。

前台

Ø  添加ScriptManager服务器控件,并把其EnablePageMethods属性设为true。

Ø  通过PageMethods方法调用后台定义的public、static方法

 

PageMethods方法简介:

PageMethods.FunctionName(Paramter1,Parameter2,...,funRight,funError, userContext);

1)      Paramter1,Parameter2,...,表示的是FunctionName的参数,类型是Object或Array; 

2)      funRight是方法调用成功后的回调函数,对返回值进行处理

3)      funError是当后台的FunctionName方法发生异常情况下的执行的Js方法(容错处理方法), 

4)      userContext是可以传递给SuccessMethod方法,或是FailedMethod方法的任意内容。

举例:

后台代码:

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using System.Web.Services;
  8. namespace WebApplication4
  9. {
  10. public partial class WebForm10 : System.Web.UI.Page
  11. {
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14. }
  15. [WebMethod]
  16. public static string test1(string userName)
  17. {
  18. return "hello "+userName+", 这是通过WebService实现前台调用后台方法";
  19. }
  20. }
  21. }

前台代码:

  

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm10.aspx.cs" Inherits="WebApplication4.WebForm10" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title></title>
  7. </head>
  8. <body>
  9. <form id="form1" runat="server">
  10. <%--引入ScriptManager服务器控件--%>
  11. <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
  12. <script type="text/javascript">
  13. function bclick() {
  14. PageMethods.test1("zhipeng", funRight);
  15. }
  16. function funRight(val)       //回调函数,用val接受后台代码test1的执行结果
  17. {
  18. alert(val);
  19. }
  20. </script>
  21. <input id="Button1" type="button" value="方法测试" onclick="bclick()" />//点击按钮会弹出对话框“通过WebService实现前台调用后台方法”
  22. </form>
  23. </body>
  24. </html>

点击按钮弹出如下对话框:

  

方法二:通过<%=methodname()%>和<%#methodname()%>(methodname()为后台定义的方法)

这种方法调用的后台方法可能出现在前台的位置有3种情况:

1)     服务器端控件或HTML控件的属性

2)     客户端js代码中

3)     Html显示内容的位置(它作为占位符把变量显示于符号出现的位置)

这里对两者做简单实例,详细内容在后面文章中介绍

步骤:

后台

Ø  定义public或protected的变量或方法(不能为private)

前台

Ø  直接用<%= %>和<%# %>对后台变量或方法进行调用,两者的用法稍有差异(<%# %>基本上能实现<%= %>的所以功能)

举例:

后台代码:

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApplication4
  8. {
  9. public partial class WebForm1 : System.Web.UI.Page
  10. {
  11. public string name = "我是后台变量";
  12. protected void Page_Load(object sender, EventArgs e)
  13. {
  14. this.DataBind();
  15. }
  16. //不能为private
  17. protected string strTest() {
  18. return "这是前台通过<%# %>调用后台方法";
  19. }
  20. public void  strTest2()
  21. {
  22. Response.Write("这是前台通过<%= %>调用后台方法");
  23. }
  24. }
  25. }

前台代码:

  

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title></title>
  7. </head>
  8. <body>
  9. <form id="form1" runat="server">
  10. <div>
  11. <b>服务器控件</b><br /><br />
  12. 服务器端文本框绑定后台方法:<asp:TextBox ID="TextBox1" runat="server" Text="<%#strTest()%>"></asp:TextBox><%=strTest()%><br /> 
  13. ......................变量:<asp:TextBox ID="TextBox2" runat="server" Text="<%#name%>"></asp:TextBox><br /> 
  14. 服务器端文本框绑定后台方法:<asp:Label ID="Label1" runat="server" Text="Label"><%=strTest()%></asp:Label><br />
  15. 服务器端文本框绑定后台方法:<asp:Label ID="Label2" runat="server" Text="<%#strTest() %>"></asp:Label><br /><br />
  16. <br /><br />
  17. <b>客户端控件</b><br /><br />
  18. 客户端文本框绑定后台方法:<input id="Text1" type="text" value="<%#strTest()%>" /><%=name %><br /> 
  19. 客户端标签: <div><%=strTest() %></div>
  20. </div>
  21. </form>
  22. </body>
  23. </html>

运行结果:

  

<%=methodname()%>和<%#methodname()%>两种方式的详细介绍(联系与区别)会在后面文章中详细介绍。

方法三:通过隐藏服务端按钮来实现

后台代码:

  

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. namespace WebApplication4
  8. {
  9. public partial class WebForm11 : System.Web.UI.Page
  10. {
  11. protected void Button1_Click(object sender, EventArgs e)
  12. {
  13. Response.Write("这是通过隐藏控件方式实现前台访问后台方法");
  14. }
  15. }
  16. }

前台代码:

  

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm11.aspx.cs" Inherits="WebApplication4.WebForm11" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  6. <title></title>
  7. <script type="text/javascript" >
  8. function test() {
  9. //通过客户端脚本选中隐藏控件,并调用后台相关方法
  10. document.getElementById("Button1").click();
  11. };
  12. </script>
  13. </head>
  14. <body>
  15. <form id="form1" runat="server">
  16. <%--隐藏服务端铵钮--%>
  17. <asp:Button ID="Button1" runat="server" Text="Button" style="display:none"  />
  18. <%--调用客户端脚本,间接调用后台方法--%>
  19. <input id="Button2" type="button" value="button" onclick="test()" />
  20. </form>
  21. </body>
  22. </html>

总结:

  方法一的后台方法必须声明为public和static(否则会发生PageMethods未定义错误),正是由于要将方法声明为static,使得这两种方法都有局限性,即静态方法中只允许访问静态成员变量。所以要想用这两种方式调用后台方法,后台方法中是不能访问非静态成员变量的。

  方法二,后台方法没有任何限制,但是前台调用的时候由于<%=%>是只读的,<%=%>适合于调用后台方法经过处理并返回给客户端使用,不适合于将数据传到后台供后台使用

  后面会讲后台调用前台js代码。。。

.NET 前台调用后台事件和方法实现小结的更多相关文章

  1. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——理论篇

    工作两年多了,我会经常尝试给公司小伙伴儿们解决一些问题,几个月下来我发现初入公司的小朋友最爱问的问题就三个 1. 我想前台调用后台的XXX方法怎么弄啊? 2. 我想后台调用前台的XXX JavaScr ...

  2. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——实践篇(二)

    在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议内容,在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP—— ...

  3. 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP

    由ASP.NET所谓前台调用后台.后台调用前台想到HTTP 在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议内容,在由 ...

  4. ASP.NET所谓前台调用后台、后台调用前台想到HTTP——实践篇

    由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——实践篇 在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议 ...

  5. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  6. 关于客户端调用后台事件__doPostBack函数的使用

    1.   动态添加生成的控件:Asp.net开发网站,最喜欢用的就是使用服务器控件,在后台进行数据操作了,你无需再去管get还是post提交,也不用去理会form,只需在后台服务器控件的事件中就可以对 ...

  7. 类型:Jquery;问题:jquery调用后台带参数方法;结果:利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法。

    利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法. [WebMethod]   命名空间 1.无参数的方法调用, 注意:1.方法一定要静态方法,而且要有[WebMethod] ...

  8. Ajax前台调用后台方法、AJAX Pro2(回调函数)

    //获取分店 function cityResult() { if (cityName != "") { $("#ddlcity_").find("o ...

  9. ASP.NET中前台调用后台的方法

    学习文章:http://www.cnblogs.com/kingteach/archive/2010/11/12/1875633.html 练习代码: 前台: <html xmlns=" ...

随机推荐

  1. 14.Nginx 文件名逻辑漏洞(CVE-2013-4547)

    由于博主在渗透网站时发现现在Nginx搭建的网站是越来越多 所以对Nginx的漏洞来一个全面性的复习,本次从Nginx较早的漏洞开始分析. 2013年底,nginx再次爆出漏洞(CVE-2013-45 ...

  2. Sharepoint商务智能学习笔记之PowerPviot Service安装与配置(七)

    1) PowerPviot Service多服务器部署注意事项 PowerPviot Service不是Sharepoint自带的服务,要想使用PowerPviot Service需要先在sharep ...

  3. 常见的web漏洞及其防范

    原文地址:http://blog.csdn.net/u013777676/article/details/52124298 一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻 ...

  4. Mysql分片后分页排序拉取数据的方法

    高并发大流量的互联网架构,一般通过服务层来访问数据库,随着数据量的增大,数据库需要进行水平切分,分库后将数据分布到不同的数据库实例(甚至物理机器)上,以达到降低数据量,增加实例数的扩容目的. 一旦涉及 ...

  5. filter、map、reduce区别

    1.filter filter(function,sequence)-->list,tuple or string 1)       参数func是自定义的过滤函数,在函数func(item)中 ...

  6. 自定义进度条PictureProgressBar——从开发到开源发布全过程

    自定义进度条PictureProgressBar——从开发到开源发布全过程 出处: 炎之铠邮箱:yanzhikai_yjk@qq.com 本文原创,转载请注明本出处! 本项目JCenter地址:htt ...

  7. lynis检测

    https://www.cnblogs.com/ssooking/p/6034402.html Usage: lynis command [options] Command: audit audit ...

  8. php微信公众号开发简单记录

    开发前准备:1.服务器 2.微信公众号测试号(有真实的账号更好) 测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/lo ...

  9. POJ1020 Anniversary Cake

    题目来源:http://poj.org/problem?id=1020 题目大意:有一块边长为s的正方形大蛋糕,有n个客人,每个客人想分一块边长为si的正方形蛋糕.求这块大蛋糕能否恰好满足所有客人的需 ...

  10. Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建

    详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...