2011-09-23 44 views
2

我試圖按照這裏的建議從JScript中到__doPostBack:Call ASP.NET function from JavaScript?努力,RaisePostBackEvent不點火

但它不是爲我工作。該頁面確實回傳。但我的RaisePostBacKEvent永遠不會燃燒。我在一個用戶控件,而不是一個頁面這樣做:

public partial class MyTreatment : System.Web.UI.UserControl, IPostBackEventHandler 

人對如何得到這個工作有什麼建議?

感謝

+0

must..show..code –

+0

向我們展示您的通話__doPostBack ... –

回答

5

你指定控件的客戶端ID,而不是網頁的客戶端ID(如示例從另一個SO問題,你引用的)?

如果沒有,那麼這將解釋爲什麼該頁面回發,但沒有在您的控件中調用RaisePostBack方法。

要引用您控制的客戶端ID,調用__doPostBack函數像這樣:

__doPostBack("<%= yourControlID.ClientID %>", "an argument"); 

作爲一個側面說明,如果你的控制頁面,則__doPostBack功能不會被創建的唯一控制ASP.NET,除非您爲您的控件撥打電話GetPostBackEventReference

您不一定需要使用該引用,但需要調用該方法,以便頁面知道生成客戶端功能。

您可以撥打GetPostBackEventReference像這樣:

public class MyTreatment : UserControl, IPostBackEventHandler 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     string postBackEventReference = Page.ClientScript.GetPostBackEventReference(this, string.Empty); 

     base.OnLoad(e); 
    } 

    public void RaisePostBackEvent(string eventArgument) 
    { 

    } 
} 

希望這有助於。

+0

我發現了另一種使用OnClientClick =「return myJSFunction();」的方法但我會將你的答覆標記爲答案,即使我不確定這是否是我遇到的問題。謝謝 – merk

2

應該使用用戶控件實例ID的UniqueID屬性(我不能讓這個與客戶端ID的工作,在我自己的親身經歷)工作。像這樣:

__doPostBack("<%= yourControlID.UniqueID %>", "arg"); 
+1

我已經經歷了同樣的事情遷移到.NET 4.0後 - 最終我發現,RaisePostBackEvent從未解僱(控制工具IPostBackEventHandler接口)由於控制ID錯誤 - 在控制創建Render中的某處,我添加了__doPostBack,並且在調試時ID似乎是「ctlContainer_grdDataGrd」,但在頁面上卻是「ctlContainer $ grdDataGrd」。將代碼ClientID更改爲生成的JavaScript的UniqueID(用於__doPostBack函數參數)後,所有工作都像魅力一樣! – Ivan