文章引用:http://blog.xuite.net/johnnyle/worker/19043851 - [AJAX] 使用 PageMethods 從 JavaScript 中直接呼叫 Server 端函數 @ Johnny Worker's Blog 隨意窩 Xuite日誌
=========================================================================
PageMethods:
如果我們在 ScriptManager 中設定 EnablePageMethods 屬性, 而且在 Server 端某個方法上加上 WebMethod 標記,
我們就可以直接從 JavaScript 中把這個 Server 端的方法拿來當做 JavaScript 的函式一樣的使用。
先看看以下的範例:
.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test Ajax Page Methods</title>
<script type="text/javascript" language="javascript">
function showMessage() {
var ctl = $get('txt');
PageMethods.convNameToColor(ctl.value, success, null);
}
function success(result, context, method) {
if (method == 'convNameToColor') {
alert(result);
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnablePageMethods="true"/>
</div>
<asp:TextBox runat="server" ID="txt" />
<asp:Button runat="server" ID="btn" Text="Submit"
OnClientClick="showMessage();" />
</form>
</body>
</html>
.aspx.cs
using System.Drawing;
...
[System.Web.Services.WebMethod]
public static string convNameToColor(string colorName)
{
Color c = Color.FromName(colorName);
if (c.IsKnownColor)
return "#" +
((c.R < 16) ? "0" : "") + Convert.ToString(c.R, 16) +
((c.G < 16) ? "0" : "") + Convert.ToString(c.G, 16) +
((c.B < 16) ? "0" : "") + Convert.ToString(c.B, 16);
else
return null;
}
這個網頁很簡單, 上面只有兩個控制項, 一個 TextBox, 一個 Button。在 TextBox 中輸入一個顏色名稱 (例如 red), 再按下
Button, 就會將顏色名稱透過 convNameToColor 方法轉換成類似 #00ff00 的十六進位 RGB 表示式。這個程式的神奇之處在於這個 convNameToColor 方法其實是在 Server 端以 ASP.NET 撰寫的, 但是你卻可以直接在 JavaScript
中當成一般的函式來呼叫並相互傳值。
透過這種方法, 我們將可建立一道從 JavaScript 通往 Server 的方便之門, 我相信你一定可以由此發展出更豐富的應用。