3

中添加一个服务引用程序是否有可能在异步回发过程中一个新的ServiceReference实例添加到ScriptManagerPage,使得随后我可以通过客户端脚本中使用引用的Web服务?异步回发

我试图做这UserControl一个Repeater内坐镇内线,这就是为什么在Page_Load编程方式添加的ScriptReference不在这里工作了。

编辑2:这是我从我的UserControl调用不去做什么,我希望(异步回发过程中添加服务引用到的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")); 
} 

我的目标是为我我的用户控件尽可能不影响周围的应用程序;否则我将不得不静静地定义ServiceReference在包含PageScriptManagerProxy,这不是我想要的。

编辑:

我一定是累了的时候,我写这篇文章......因为我的意思是写ServiceReference没有ScriptReference。相应地更新了上面的文字。

现在我有:

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

,但我要注册在代码隐藏web服务。

+0

结帐我更新的答案! – Krunal

回答

1

编辑:

检查您的问题后,这就是为什么它不工作的原因: 当您添加服务引用到的ScriptManager>服务部分手动在页面中。它增加了1个客户端脚本包含指令。

如:

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

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

它为您提供可访问到你的Frontend.Web.YourScriptMethods

现在,当您在异步回发添加服务引用 - 它不添加此客户端脚本包括所以你得到客户端脚本错误 - 方法是未定义的。

但我想出了一个解决方法为此; (不知道它是做正确的方式)

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

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

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

希望这有助于

Krunal Mevada


老答:

使用下列内容:

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 
     ScriptManager.GetCurrent(this).Services.Add(new ServiceReference("~/Service.asmx")); 
    } 
+0

这就是我已经在做的事情(参见上面我的第二个编辑注释)。不幸的是,对我而言,它不能按预期工作。 – Oliver

+0

@Oliver - 你如何在客户端使用服务?你能解释一下吗? – Krunal

+0

@Krunal - 我的webservice位于命名空间Frontend.Web中,并携带[ScriptService]属性,我调用的方法Submit提供[ScriptMethod(ResponseFormat = ResponseFormat.Json)]。然后在客户端JavaScript中调用'Frontend.Web.Submit(arguments);' - 而已。只是在客户端没有定义Frontend.Web.Submit,如果我在异步回发期间添加ServiceReference .. – Oliver

2

尝试这样的事情...

if (ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
{ 
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "script1", "~/js/myjs.js"); 
} 
+0

感谢您的例子,Krunal,但实际上我试图添加一个ServiceReference到ScriptManager。抱歉!更新了上面的帖子。 – Oliver