是否可以在异步回发期间在ServiceReference
上的ScriptManager
上添加新的 Page
实例,以便随后可以通过客户端脚本使用引用的Web服务?
我试图在UserControl
内的Repeater
内执行此操作,这就是为什么在Page_Load
期间以编程方式添加ScriptReference不能在这里工作的原因。
编辑2:这是我从UserControl
调用的代码,它没有达到我的期望(在异步回发过程中将ServiceReference添加到ScriptManager中):
private void RegisterWebservice(Type webserviceType)
{
var scm = ScriptManager.GetCurrent(Page);
if (scm == null)
throw new InvalidOperationException("ScriptManager needed on the Page!");
scm.Services.Add(new ServiceReference("~/" + webserviceType.Name + ".asmx"));
}
我的目标是使我的UserControl对周围的应用程序尽可能不打扰。否则,我将不得不在包含的
ServiceReference
上的ScriptManagerProxy
中静态定义 Page
,这不是我想要的。编辑:
我写这篇文章的时候一定很累...因为我的意思是写
ServiceReference
而不是ScriptReference
。相应地更新了上面的文本。我现在有:
<asp:ScriptManagerProxy runat="server" ID="scmProxy">
<Services>
<asp:ServiceReference Path="~/UsefulnessWebService.asmx" />
</Services>
</asp:ScriptManagerProxy>
但是我想在CodeBehind中注册Web服务。
最佳答案
编辑:
检查您的问题之后,这是它无法正常工作的原因:
在页面中手动将ServiceReference添加到ScriptManager>服务部分时。它添加了1个客户端脚本include指令。
例如:
<script src="TestService.asmx/jsdebug" type="text/javascript"></script>
要么
<script src="TestService.asmx/js" type="text/javascript"></script>
通过它,您可以访问 Frontend.Web.YourScriptMethods ,
现在,当您在异步回发中添加ServiceReference-时,不会在中添加此客户端脚本。 因此,您将获得客户端脚本错误-方法 undefined 。
但是我为此找到了解决方法; (不知道这是正确的方法)
if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
{
ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "testservice", "TestService.asmx/js");
}
您可以根据您的项目/ Web服务替换“TestService.asmx”路径。
这样您就可以实现您想要的。
希望这可以帮助,
克鲁纳尔·内华达州
旧Ans:
使用以下内容:
if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
{
ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx"));
}
关于asp.net - 在异步回发期间以编程方式添加ServiceReference,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1941056/