在this tutorial I am reading中,Dave Ward創建了一個頁面,該頁面顯示標籤中的服務器日期而不使用更新面板。如何將使用Ajax webmethods的ASP.NET頁面轉換爲啓用了Ajax的servercontrol?
我想了解如何創建使用ajax進行部分回發的servercontrol,其中控件中的方法是由同一控件生成的clientscript調用的,我認爲學習如何將此頁面轉換爲服務器控件將是幫助我瞭解什麼servercontrols使用,而不是webmethods公開他們的方法clientcript。
我完全按照文章所述創建了頁面,代碼隱藏和JavaScript,並獲得了示例工作。
於是,開始嘗試將其轉換爲一個servercontrol,我搬到戴夫的JavaScript的網頁到一個文件中,〜測試/ JScript.js:
function UpdateTime() {
PageMethods.GetCurrentDate(OnSucceeded, OnFailed);
}
function OnSucceeded(result, userContext, methodName) {
$get('Literal1').innerHTML = result;
}
function OnFailed(error, userContext, methodName) {
$get('Literal1').innerHTML = "An error occured.";
}
並把下面的類,我App_Code文件:現在
namespace foo
{
/// <summary>
/// Summary description for ServerControlTest
/// </summary>
public class ServerControlTest : CompositeControl, IScriptControl
{
ScriptManager sm;
protected override void OnPreRender(EventArgs e)
{
if (!this.DesignMode)
{
// Test for ScriptManager and register if it exists
sm = ScriptManager.GetCurrent(Page);
if (sm == null)
throw new HttpException("A ScriptManager control must exist on the current page.");
sm.RegisterScriptControl(this);
sm.EnablePageMethods = true;
}
base.OnPreRender(e);
}
protected override void OnLoad(EventArgs e)
{
Literal lit = new Literal();
lit.Text = "<span ID=\"Literal1\" runat=\"server\">test</span><input id=\"Button1\" type=\"button\" value=\"button\" onclick=\"UpdateTime();\" />";
this.Controls.Add(lit);
}
protected override void Render(HtmlTextWriter writer)
{
if (!this.DesignMode)
sm.RegisterScriptDescriptors(this);
base.Render(writer);
}
[WebMethod]
public static string GetCurrentDate()
{
return DateTime.Now.ToString();
}
#region IScriptControl Members
IEnumerable<ScriptDescriptor> IScriptControl.GetScriptDescriptors()
{
return null;
}
IEnumerable<ScriptReference> IScriptControl.GetScriptReferences()
{
ScriptReference reference = new ScriptReference();
reference.Path = ResolveClientUrl("~/tests/JScript.js");
return new ScriptReference[] { reference };
}
#endregion
}
}
,在我的示例中,只要按一下按鈕,我得到這個錯誤: PageMethods沒有定義 [打破這個錯誤] PageMethods.GetCurrentDate(OnSucceeded,OnFailed);
如何從我的控件註冊的clientscript中調用GetCurrentDate?
謝謝你的答案,戴夫。我感到沮喪,想知道我錯過了什麼。到目前爲止,博客上的所有內容都對我有所幫助。 – NetHawk 2008-12-03 17:46:07