gpt4 book ai didi

asp.net - 如何将使用 Ajax webmethods 的 ASP.NET 页面转换为支持 Ajax 的服务器控件?

转载 作者:行者123 更新时间:2023-12-02 11:15:29 25 4
gpt4 key购买 nike

this tutorial I am reading ,Dave Ward 创建了一个页面,在标签中显示服务器日期,而不使用更新面板。

我正在尝试学习如何创建使用ajax进行部分回发的服务器控件,其中从同一控件生成的客户端脚本调用控件内的方法,并且我认为学习如何将此页面转换为服务器控件将是一个帮助我了解服务器控件使用什么而不是 webmethods 将其方法公开给客户端脚本。

我完全按照文章所述创建了页面、隐藏代码和 javascript,并使示例正常工作。

因此,为了开始尝试将其转换为服务器控件,我将 Dave 的页面 Javascript 移至文件 ~tests/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);

如何从我的控件注册的客户端脚本调用 GetCurrentDate?

最佳答案

从 v3.5 开始,实际上还没有完全封装的方法来实现针对服务器控件方法的 AJAX 回调。这是一个非常令人沮丧的限制。

最常见的解决方案是在服务器控件的程序集中创建 HttpHandler,然后要求在 web.config 中注册该处理程序。例如,看看 ASP.NET AJAX 的 ScriptResource.axd 在 ASP.NET AJAX 1.0 的 web.config 中是如何连接的。

关于asp.net - 如何将使用 Ajax webmethods 的 ASP.NET 页面转换为支持 Ajax 的服务器控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/337978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com