zoukankan      html  css  js  c++  java
  • ASP.NET如何在客户端调用服务端代码

    摘自:http://www.dnnstudy.com/Default.aspx?tabid=52&ctl=Detail&mid=403&Id=1640

    比如我们在页面上有3个TextBox,3个Button,每个Button分别执行不同的动作。我们现在想在TextBox中检测是否按下了回车键,如果是则执行不同的Button调用。即TextBox1中按下回车就执行Button1的动作,......

    测试中,我发现要调用服务器端代码必须调用__doPostBack函数,但该函数除了在放置有DataGrid控件的页面中会由系统产生外,其他的页面中并不存在。(可以通过查看源文件看到该代码)。这样我们必须手工在aspx中添加__doPostBack函数,和函数一起添加的还有两个隐藏元素,__EVENTTARGET和__EVENTARGUMENT,这是__doPostBack所必须的,实际上,.NET是把产生事件的元素名称以及参数传到,__EVENTTARGET和__EVENTARGUMENT。然后再调用Form的submit函数提交回服务器的,服务器端根据传回来的参数就知道是哪个控件被触发了,从而调用它的相应后端代码,然后再将新页面回送回客户端的。
    以下是我的测试页面,其中使用了两种方法来检测TextBox中的按键
    WebForm2.aspx
    --------------------------------------------------------
    <%@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="UTF8Test.WebForm2" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
     <HEAD>
      <title>WebForm2</title>
      <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
      <meta content="C#" name="CODE_LANGUAGE">
      <meta content="javascript" name="vs_defaultClientScript">
      <meta content="http://schemas.microsoft.com/intellisense/ie5"; name="vs_targetSchema">
      <script language="javascript" event="onkeydown" for="TextBox1">

          
       if(event.keyCode==13)<!-- 注意大小写-->
       {
        __doPostBack('Button1','');
        return false;<!--很重要,不然会选择Button1进行提交  -->
       }
       
      </script>
      <script language="javascript" event="onkeydown" for="TextBox2">

          
       if(event.keyCode==13)
       {
        __doPostBack('Button2','');
        return false;<!--很重要,不然会选择Button1进行提交  -->
       }
       
      </script>
      <script language="javascript">
        function keypress()
        {
         if(event.keyCode==13)
       {
          
        __doPostBack('Button3','');
        event.keyCode=0; <!--很重要,不然会选择Button1进行提交  -->
        return false;<!--很重要,不然会选择Button1进行提交  -->
       }
        }
      </script>
     </HEAD>
     <body MS_POSITIONING="GridLayout">
      <form id="Form1" method="post" runat="server">
       <input type="hidden" name="__EVENTTARGET"> <input type="hidden" name="__EVENTARGUMENT">
       <script language="javascript" type="text/javascript">
    <!--
     function __doPostBack(eventTarget, eventArgument) {
      var theform;
      if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
       theform = document.Form1;
      }
      else {
       theform = document.forms["Form1"];
      }
      theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
      theform.__EVENTARGUMENT.value = eventArgument;
      theform.submit();
     }
    // -->
       </script>
       <asp:button id="Button1" style="Z-INDEX: 101; LEFT: 192px; POSITION: absolute; TOP: 88px" runat="server"
        Text="Button1"></asp:button><asp:textbox id="TextBox1" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 88px" runat="server"></asp:textbox>
       <asp:Button id="Button2" style="Z-INDEX: 103; LEFT: 192px; POSITION: absolute; TOP: 120px" runat="server"
        Text="Button2"></asp:Button>
       <asp:TextBox id="TextBox2" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 120px" runat="server"></asp:TextBox>
       <asp:TextBox id="TextBox3" style="Z-INDEX: 105; LEFT: 16px; POSITION: absolute; TOP: 152px" runat="server"></asp:TextBox>
       <asp:Button id="Button3" style="Z-INDEX: 106; LEFT: 192px; POSITION: absolute; TOP: 152px" runat="server"
        Text="Button3"></asp:Button>
       <asp:Label id="Label1" style="Z-INDEX: 107; LEFT: 24px; POSITION: absolute; TOP: 56px" runat="server"></asp:Label></form>
     </body>
    </HTML>

    WebForm2.aspx.cs
    ----------------------------------------------------------------------
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    namespace UTF8Test
    {
     /// <summary>
     /// WebForm2 的摘要说明。
     /// </summary>
     public class WebForm2 : System.Web.UI.Page
     {
      protected System.Web.UI.WebControls.TextBox TextBox1;
      protected System.Web.UI.WebControls.Button Button2;
      protected System.Web.UI.WebControls.TextBox TextBox2;
      protected System.Web.UI.WebControls.TextBox TextBox3;
      protected System.Web.UI.WebControls.Button Button3;
      protected System.Web.UI.WebControls.Label Label1;
      protected System.Web.UI.WebControls.Button Button1;
     
      private void Page_Load(object sender, System.EventArgs e)
      {
       // 在此处放置用户代码以初始化页面
       TextBox3.Attributes.Add("onkeypress","keypress()");//注意大小写
      }

      #region Web 窗体设计器生成的代码
      override protected void OnInit(EventArgs e)
      {
       //
       // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
       //
       InitializeComponent();
       base.OnInit(e);
      }
      
      /// <summary>
      /// 设计器支持所需的方法 - 不要使用代码编辑器修改
      /// 此方法的内容。
      /// </summary>
      private void InitializeComponent()
      {    
       this.Button1.Click += new System.EventHandler(this.Button1_Click);
       this.Button2.Click += new System.EventHandler(this.Button2_Click);
       this.Button3.Click += new System.EventHandler(this.Button3_Click);
       this.Load += new System.EventHandler(this.Page_Load);

      }
      #endregion

      private void Button1_Click(object sender, System.EventArgs e)
      {
       Label1.Text = "1";
      }

      private void Button2_Click(object sender, System.EventArgs e)
      {
       Label1.Text = "2";
      }

      private void Button3_Click(object sender, System.EventArgs e)
      {
       Label1.Text = "3";
      }
     }
    }

  • 相关阅读:
    WinForm控件常用设置(转)
    EF Core性能优化(一)
    如何更改已经释放的(released)传输请求(TR)的描述
    在新窗口调用Tcode[ABAP4_CALL_TRANSACTION]
    [代码]如何取得表/结构的列名字(cl_abap_structdescr)
    [代码]创建.ZIP压缩文件[CL_ABAP_ZIP]
    如何在表维护视图(maintenance view)上添加自定义按钮(SM30)
    [代码]基于动态内表的ALV
    物料单位转换函数[MD_CONVERT_MATERIAL_UNIT]
    拆分全路径名得到路径+文件名[STPU1_EXTRACT_FILENAME]
  • 原文地址:https://www.cnblogs.com/wxmxiaoming/p/303542.html
Copyright © 2011-2022 走看看