3

是否可以在异步回发期间向 on添加一个新ServiceReference实例,以便随后我可以通过客户端脚本使用引用的 Web 服务?ScriptManagerPage

我正在尝试在 aUserControl中执行此操作Repeater,这就是为什么在此期间以编程方式添加 ScriptReferencePage_Load不起作用的原因。

编辑 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 对周围的应用程序尽可能不显眼;否则我将不得不在 contains 上静态定义ServiceReferencein a ,这不是我想要的ScriptManagerProxyPage

编辑:

我写这篇文章的时候一定很累……因为我本来ServiceReference不想写的ScriptReference。相应地更新了上面的文字。

我现在有:

<asp:ScriptManagerProxy runat="server" ID="scmProxy">
    <Services>
        <asp:ServiceReference Path="~/UsefulnessWebService.asmx" />
    </Services>
</asp:ScriptManagerProxy>

但我想在 CodeBehind 中注册 web 服务。

4

2 回答 2

2

尝试这样的事情......

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
{
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "script1", "~/js/myjs.js");
}
于 2009-12-22T05:28:45.147 回答
1

编辑:

检查您的问题后,以下是它不起作用的原因:当您在页面中手动将 ServiceReference 添加到 ScriptManager > Services 部分时。它添加了 1 个客户端脚本包含指令。

例如:

<script src="TestService.asmx/jsdebug" type="text/javascript"></script>

或者

<script src="TestService.asmx/js" type="text/javascript"></script>

它使您可以访问您的Frontend.Web.YourScriptMethods

现在,当您在异步回发中添加 ServiceReference 时 -它不会添加此客户端脚本 inclue所以你得到客户端脚本错误 - 方法未定义。

但我想出了一个解决方法(不知道这是正确的做法)

    if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "testservice", "TestService.asmx/js");
    }

您可以根据您的项目/Web 服务替换“TestService.asmx”路径。

这样你就可以实现你想要的。

希望这可以帮助,

克鲁纳尔·梅瓦达


老答:

使用以下:

    if (ScriptManager.GetCurrent(this).IsInAsyncPostBack)
    {
        ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx"));
    }
于 2009-12-24T05:24:24.993 回答