結果竟然會失敗,於是突然想到之前好像有人說VB.NET的按鈕事件建議設定為 mousedown 會比較好 果真用這個事件就可以了。 範例說明如下
新增一個 TestJavaScript.js 在根目錄
function CallMe(src,dest) { var ctrl = document.getElementById(src); // call server side method (注意4個參數 1:傳入的參數, 2:正確時呼叫的方法, 3:失敗時呼叫的方法, 4:最後傳回的clientID) PageMethods.GetContactName(ctrl.value,CallSuccess,CallFailed,dest); } // 當程式正確時呼叫的方法 function CallSuccess(res, destCtrl) { var dest = document.getElementById(destCtrl); dest.value = res; } // 當程式錯誤時呼叫的方法 function CallFailed(res, destCtrl) { alert(res.get_message()); }
接著客戶端畫面,ScriptManager這個ID的tag很重要,要使用PageMethods方法必須設定該行
button的按下事件必須設定為 onmousedown,若設定為 onclick 程式會回應 方法'CallMe'失敗 注意CallMe傳出去的參數 (.clientid),如果這邊有用主版頁面(.master)的話, 就必須把CallMe那行(第23行)改成
C001.aspx
<%@ Page Language="c#" AutoEventWireup="true" CodeFile="C001.aspx.cs" Inherits="C001" %>
接著伺服器後端程式,.ClientID的目的就是 因為有主版頁面的話,Client的ID會不同,
所以將Client值傳給Function做處理,而在GetContactName方法有做些檢查的應用
C001.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class C001 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Button1.Attributes.Add("onmousedown", "CallMe('" + TextBox1.ClientID + "', '" + TextBox2.ClientID + "')"); } } [System.Web.Services.WebMethod] public static string GetContactName(string TextBox1text) { string result = ""; if (TextBox1text == ""){ result = "textbox1為空值"; }else{ result = "textbox1傳來的值:" + TextBox1text; } return result; } }
範例下載
沒有留言:
張貼留言