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