快捷搜索:

PageMethod:用javascript呼叫server端的method

媒介:

从有AJAX的UpdatePanel之后,便是普遍的将新进的开拓职员无脑化,讲到UpdatePanel,在他们眼中便是「局部更新」、「非同步更新」、「画面不会闪」、「对照快」、「啥都让他Postback就好」、「不必要写javascript」。

这几点,以他们的角度来看,可以说都没错,但也可以说错的离谱。

UpdatePanel切实着实是为了快速开拓而存在,实作上切实着实可以省掉落很多javascript的撰写,画面也切实着实不会闪烁,这跟局部更新也有关系。只是背后暗藏着太多的操作,没去理解架构与运作流程,真的只会造成滥用、误解。 (虽然我不敢说我就懂AJAX架构)

UpdatePanel可以让不熟javascript的开拓职员,快速开拓类似「回呼」(CallBack)的程式。但付出的效率价值可是很大年夜的,UpdatePanel应该是当画面上触发PostBack后,拦截该PostBack事故,(然则这个时刻整页的资料、ViewState已经都传回server端了,也便是流量effort跟整页postback没啥两样)接着再去判断触发PostBack的物件,是否在UpdatePanel中,若是,则代表此物件的PostBack只需局部更新相关的原始码内容,透过XMLHttpRequest,(也便是CallBack的核心),呼叫server真个method后,再回传履行结果,至「必要更新的区块里」,也便是必要更新的UpdatePanel。

以是说,UpdatePanel真要说对照快,应该只有省Partial Render的部分(应该….应该…),AJAX的重点照样在若何应用client真个script,去履行server真个code。

除了UpdatePanel外,还可以透过javascript呼叫Web service(Web办事)或PageMethod(页面措施),来履行server真个logic。

重点开始:

这边就开始先容一下PageMethod,收拾一下在网路上看到的典型,着实还蛮轻易上手的。

Step1:首先,PageMethod是建立在ASP.NET AJAX里,也便是跟Scriptmanager相互关注。以是画面上要有Scriptmanager,而且要设定一下EnablePageMethods属性为True。

ASPExtensions:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">

ASPExtensions:ScriptManager>

Step2:WebConfig要在里面,设定一下httpModules。

httpModules>

add type="Microsoft.Web.UI.ScriptModule" name="ScriptModule"/> httpModules>

Step3:在aspx里面,拉两个textbox出来,用来当input与output的值。

asp:TextBox ID="TextBox1" runat="server" />

asp:TextBox ID="TextBox2" runat="server" Width="200px">

Step4:新增一个javascript档,叫做TestJavaScript.js。放在同一层目录底下。并在aspx的之后,include该js。

body>

script language="javascript" src="TestJavaScript.js" type="text/javascript"> script>

Step5:撰写javascript的function,CallMe()。此中,CallSuccess为XMLHttpRequest成功后要做的事,CallFailed为掉败要做的事,dest则是着末output的值要放在哪。而关键的一行便是Pagemethods.GetContactName()。

function CallMe(src,dest)

{var ctrl = document.getElementById(src);

// call server side methodPageMethods.GetContactName(ctrl.value,CallSuccess,CallFailed,dest);

}

// set the destination textbox value with the ContactNamefunction CallSuccess(res, destCtrl)

{var dest = document.getElementById(destCtrl);

dest.value = res;}

// alert message on some failure

function CallFailed(res, destCtrl){

alert(res.get_message());}

Step6:接着就要撰写后置程式码的Web Method了,也便是js里呼叫的GetContactName()。这边的例子input是TextBox1.text,output则是TextBox1.text+系统光阴。可以改动成透过TextBox1.text,捞DB相关资料后,Return到TextBox2上。要分外留意的是,需宣告成public static,且必要System.Web.Services.WebMethod的修饰语。

[System.Web.Services.WebMethod]

public static string GetContactName(string TextBox1text){

return TextBox1text + System.DateTime.Now.ToString();}

Step7:接着在Page_Load()的时刻,将javascript的function注册到TextBox1的onblur事故上。

protected void Page_Load(object sender, EventArgs e)

{if (!Page.IsPostBack)

{TextBox1.Attributes.Add("onblur", "CallMe('" + TextBox1.ClientID + "', '" + TextBox2.ClientID + "')");

}}

Step8:履行后,在TextBox1上输入”Hello World !”,就会发明onblur之后,履行了server真个GetContactName(),而且画面并未PostBack 。

着实,PageMethod的要领跟Web Service大年夜同小异,不过省了参考asmx,也省了些档案,还蛮得当特殊需求时应用。

用Client端Script呼叫Server真个Method,这我也是第一次应用,有差错或必要加强的地方,还望大年夜家见谅。

您可能还会对下面的文章感兴趣: