[ASP.NET][原創]如何在用戶端調用服務端代碼

來源:互聯網
上載者:User
[ASP.NET][原創]如何在用戶端調用服務端代碼

比如我們在頁面上有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";

  }

 }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.