【原创首发】让ASP.NET前后台没有距离

在ASP.NET开发过程中,前后台之间数据的传递,事件的调用有时候会给开发带来一些不便。我在本文中介绍一些前后台互相调用的方法。如果大家在开发中有自己的方法,请给我留言,我将集成到本文中,给后来的朋友做一些参考。将开发情境和使用方法做一些,以便更好的使用ASP.NET.

前台调用后台:

1.javaScript函数调用

a.首先建立一个按钮,在后台将调用或处理的内容写入button_click中;

b.在前台写一个js函数,内容为document.getElementById("btn1").click();

c.在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
<href="###" onclick="test()"><img src="http://www.cnblogs.com/Images/adminlogo.gif" /></a>
   <script type="text/javascript" language="javascript">
   
function test()
   {
      document.getElementById(
"Button1").click();
   }
   
</script> 
protected void Button1_Click(object sender, EventArgs e)
{
  Response.Write(
"aaaaaaaaaaaaaaa");
}

 用click不会引发页面的dopostback事件.

2.后台公共方法

a.函数声明为public
b.在html里用可以调用

<script type="text/javascript" language="javascript">
function test2()
{
  
var a = "<%=test2()%>"
  alert(a); 
}
</script> 
<href="###" onclick="test2()"><img src="http://www.cnblogs.com/Images/adminlogo.gif" /></a>
public string test2()
{
  
return "hello.";
}

3.__doPostBack方法

<script type="text/javascript" language="javascript">
function __doPostBack(eventTarget, eventArgument) 

  
var theForm = document.Form1; //指runat=server的form 
  theForm.__EVENTTARGET.value = eventTarget; 
  theFrom.__EVENTARGUMENT.value 
= eventArgument; 
  theForm.submit(); 

function onOpen()
{
  __doPostBack(
'<%= Button1.UniqueID %>','');

</script> 

<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

4.使用ajax框架中的方法

a.引用ajax.dll.我使用的是Ajax.NET Library 5.7.22.2

b.在web.config中添加

     <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax"/>
      </httpHandlers>

c.在Global.asax中添加

    protected void Application_Start(object sender, EventArgs e)
    {
          Ajax.Utility.HandlerPath = "ajax";
     }

d.在使用页的后台添加

protected void Page_Load(object sender, EventArgs e)
{
  Ajax.Utility.RegisterTypeForAjax(
typeof(_Default));
}

[Ajax.AjaxMethod]
public string ajaxTest()
{
  
return DateTime.Now.ToString();
}

说明:typeof(_Default))为使用页的页面类名. [Ajax.AjaxMethod]是需要使用的ajax方法的标识.

e.在前台页面中使用.

<script language="javascript" type="text/javascript">
// <!CDATA[
function Button1_onclick() {
var tempstr =_Default.ajaxTest().value;
//alert(document.getElementById("Label1").innerHTML);
document.getElementById("Label1").innerHTML = tempstr;    
}
// ]]>
</script>

<input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />

后台调用前台:

1.RegisterStartupScript(key, script)方法
方法说明:
    接受两个字符串作为输入。第二个参数 script 是要插入到页面中的客户端脚本,包括 <script> 的起始标记和终止标记。第一个参数 key 是插入的客户端脚本的唯一标识符。 Web 窗体的结尾处(在 </form> 标识之前)发送脚本块。
调用Demo:
前台脚本:

<script type="text/javascript" language="javascript">
 
function Show()
 {
   alert(
"Hello");
 }
</script> 
普通环境后台:
Page.ClientScript.RegisterStartupScript(this.GetType(), "Show""javascript:Show()",true);
Ajax环境后台:
ScriptManager.RegisterStartupScript(this.Page, typeof(_Default), "show""Show();"true);

2.RegisterClientScriptBlock(key, script)方法
方法说明:
    接受两个字符串作为输入。第二个参数 script 是要插入到页面中的客户端脚本,包括 <script> 的起始标记和终止标记。第一个参数 key 是插入的客户端脚本的唯一标识符。  Web 窗体的开始处(紧接着 <form runat="server"> 标识之后)发送脚本块,
调用Demo:
前台脚本:
<script type="text/javascript" language="javascript">
function Show()
{
  alert(
"Hello");
}
</script>
普通环境后台:
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Show""javascript:Show()",true);
Ajax环境后台:
ScriptManager.RegisterClientScriptBlock(this.Page, typeof(_Default), "show""Show();"true);

3.控件属性添加
例如为按钮控件添加OnClick调用前台Show()方法.
btnShow.Attributes.Add("OnClick""javascript:Show()");


前台调用后台,然后返回前台:

1.通过asp.net 2.0中提供的客户端回调函数GetCallbackEventReference

使用方法和Demo讲解
前台代码

后台代码
原文地址:https://www.cnblogs.com/a311300/p/1240590.html