是否可以在异步回发期间在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/

10-12 12:42
查看更多