javascript- 利用 JavaScript 做到簡單的 AJAX功能。

摘要:javascript- 利用 JavaScript 做到簡單的 AJAX功能。

功能簡述:

在執行畫面中有 ddlMenu1、ddlMenu2 兩個 DroipDownList 控制項。

我想要在 ddlMenu1 選項改變時,透過呼叫CallBack.aspx 來達到將資料動態填入ddlMenu2選項中。

 

wf1.aspx (執行畫面)

image

 

 

1. 首先在 wf1.aspx 加入 ddlMenu1、ddlMenu2 兩個 DroipDownList 控制項,並設定相關的Text、Value。

 

wf1.aspx (HTML原始碼)

   1:  <%@ Page language="c#" Codebehind="wf1.aspx.cs" AutoEventWireup="false" Inherits="WebTestApp2.wf1" %>
   2:  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
   3:  <HTML>
   4:      <HEAD>
   5:          <title>wf1</title>
   6:          <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
   7:          <meta content="C#" name="CODE_LANGUAGE">
   8:          <meta content="JavaScript" name="vs_defaultClientScript">
   9:          <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  10:          <script id="RunObj"></script>
  11:          <script language="javascript">
  12:              function CallBackPage(CtrlName1,CtrlName2)
  13:              {
  14:                  var Menu1Value = document.getElementById(CtrlName1).value;                
  15:                  RunObj.src="backPage.aspx?name="+CtrlName2+"&value="+Menu1Value;
  16:              }
  17:          </script>
  18:      </HEAD>
  19:      <body>
  20:          <form id="Form1" method="post" runat="server">
  21:              <FONT face="新細明體">
  22:                  <asp:dropdownlist id="ddlMenu1" runat="server">
  23:                      <asp:ListItem Value="001">Menu1-1</asp:ListItem>
  24:                      <asp:ListItem Value="002">Menu1-2</asp:ListItem>
  25:                      <asp:ListItem Value="003">Menu1-3</asp:ListItem>
  26:                      <asp:ListItem Value="004">Menu1-4</asp:ListItem>
  27:                  </asp:dropdownlist>
  28:                  <asp:dropdownlist id="ddlMenu2" runat="server"></asp:dropdownlist>
  29:              </FONT>
  30:          </form>
  31:      </body>
  32:  </HTML>

 

 

2. 接著在 wf1.aspx.cs 裡針對 ddlMenu1 控制項加上onChange事件之屬性值。
3. 在 wf1.aspx (HTML原始碼) 加上 CallBackPage function 的javascript程式碼。
4. 在 wf1.aspx (HTML原始碼) 加上 <script id="RunObj"></script>。
5. CallBackPage function 中,將呼叫backPage.aspx,並抓回相關的JavaScript語法。

 

wf1.aspx.cs

   1:  using System;
   2:  using System.Collections;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Web;
   7:  using System.Web.SessionState;
   8:  using System.Web.UI;
   9:  using System.Web.UI.WebControls;
  10:  using System.Web.UI.HtmlControls;
  11:  
  12:  namespace WebTestApp2
  13:  {
  14:      /// <summary>
  15:      /// wf1 的摘要描述。
  16:      /// </summary>
  17:      public class wf1 : System.Web.UI.Page
  18:      {
  19:          protected System.Web.UI.WebControls.DropDownList ddlMenu1;
  20:          protected System.Web.UI.WebControls.DropDownList ddlMenu2;
  21:      
  22:          private void Page_Load(object sender, System.EventArgs e)
  23:          {
  24:              // 在這裡放置使用者程式碼以初始化網頁
  25:              if(!IsPostBack)
  26:              {
  27:                  ddlMenu1.Attributes.Add("onChange","CallBackPage('" + ddlMenu1.ClientID.ToString() +"','" + ddlMenu2.ClientID.ToString() +"')");
  28:              }
  29:          }
  30:  
  31:          #region Web Form 設計工具產生的程式碼
  32:          override protected void OnInit(EventArgs e)
  33:          {
  34:              //
  35:              // CODEGEN: 此為 ASP.NET Web Form 設計工具所需的呼叫。
  36:              //
  37:              InitializeComponent();
  38:              base.OnInit(e);
  39:          }
  40:          
  41:          /// <summary>
  42:          /// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
  43:          /// 這個方法的內容。
  44:          /// </summary>
  45:          private void InitializeComponent()
  46:          {    
  47:              this.Load += new System.EventHandler(this.Page_Load);
  48:  
  49:          }
  50:          #endregion
  51:      }
  52:  }

 

 

6. 在 backPage.aspx (HTML模式)中,其他HTML相關Tag 通通刪除,只留下 <%@ Page Language ... 此行。

 

backPage.aspx

image

 

7. 在backPage.aspx.cs 中抓取從 wf1.aspx/javascript function/RunObj.src 網址中所送過來的參數值。
8. 將相關參數值經過處理後,產生對應的JavaScript語法,並列印在backPage.aspx網頁畫面上,傳回wf1.aspx。
9. 而且wf1.aspx 接收到回傳的javascript語法後並執行,就會動態填入資料進 ddlMenu2 控制項的選項中。

 

backPage.aspx.cs

   1:  using System;
   2:  using System.Collections;
   3:  using System.ComponentModel;
   4:  using System.Data;
   5:  using System.Drawing;
   6:  using System.Web;
   7:  using System.Web.SessionState;
   8:  using System.Web.UI;
   9:  using System.Web.UI.WebControls;
  10:  using System.Web.UI.HtmlControls;
  11:  
  12:  namespace WebTestApp2
  13:  {
  14:      /// <summary>
  15:      /// backPage 的摘要描述。
  16:      /// </summary>
  17:      public class backPage : System.Web.UI.Page
  18:      {
  19:          private void Page_Load(object sender, System.EventArgs e)
  20:          {
  21:              // 在這裡放置使用者程式碼以初始化網頁
  22:              
  23:              Response.CacheControl = "no-cache";
  24:              Response.AddHeader ("Pragma", "no-cache");
  25:              Response.Expires = -1;
  26:              
  27:              string m_1 = Request.QueryString["name"].ToString().Trim();
  28:              string m_2 = Request.QueryString["value"].ToString().Trim();
  29:              string Htm;
  30:  
  31:              Htm = "document.all."+m_1+".options.length=0;";
  32:              Htm += "document.all."+m_1+".options[0]=new Option('Menu2-"+m_2+"','00"+m_2+"');";
  33:              
  34:              Response.Write(Htm);
  35:          }
  36:  
  37:          #region Web Form 設計工具產生的程式碼
  38:          override protected void OnInit(EventArgs e)
  39:          {
  40:              //
  41:              // CODEGEN: 此為 ASP.NET Web Form 設計工具所需的呼叫。
  42:              //
  43:              InitializeComponent();
  44:              base.OnInit(e);
  45:          }
  46:          
  47:          /// <summary>
  48:          /// 此為設計工具支援所必須的方法 - 請勿使用程式碼編輯器修改
  49:          /// 這個方法的內容。
  50:          /// </summary>
  51:          private void InitializeComponent()
  52:          {    
  53:              this.Load += new System.EventHandler(this.Page_Load);
  54:          }
  55:          #endregion
  56:      }
  57:  }

 

 

若有任何問題,歡迎指教!謝謝 ~