2014-08-28 64 views
0

我寫了一個.NET Web用戶控件。它包含一些服務器控件和一些支持JavaScript。訪問服務器控件與控件ID關聯?

我還有一個全球性的ValidateMyControl() JavaScript函數,它返回一個值,指示當前控件是否包含有效數據。該函數可以在包含該控件的頁面上的JavaScript中調用。

我的問題是當我的控件在頁面上有多個實例時。我可以讓頁面的客戶端腳本像這樣傳遞控件ID:

ValidateMyControl('<%= MyControl.ClientID %>'); 

這將標識代碼試圖驗證哪個實例。

但是,我的ValidateMyControl()控件如何使用該ID來引用與請求的實例關聯的服務器控件。

我以爲沒有想到的東西似乎爲我而來。有小費嗎?或者以不同的方式來處理像這樣的多個實例?

編輯:

所以一個方法,我認爲是這樣的:

var instanceData = {}; 

$(function() { 
    instanceData['<%= this.ClientID %>'] = { 
     HiddenID: '<%= hdnCompanyId.ClientID %>', 
     TextID: '<%= txtCompanyName.ClientID %>', 
     ErrorMessageID: '<%= divErrorMessage.ClientID %>' 
    }; 
}); 

的想法是初始化該控件實例映射到的ID中的對象添加到一個數組它是服務器控件。

但這似乎效率低下。很想找到更好的方法。

回答

0

設置class屬性到用戶控件中的服務器控件 - 即使沒有定義這樣的css類。然後:

function ValidateMyControl(aControlId) { 
    var companyId = $("#" + aControlId).find(".classCompanyId").val(); 
    ... 
} 
+0

似乎是一個合理的建議,但我發現控制本身沒有任何元素。它呈現子控件,但容器沒有元素。 – 2014-08-29 03:21:41

+0

將用戶控件的內容封裝在Panel(客戶端上的div)中,並使用'ValidateMyControl('<%= MyControl.Panel.ClientID%>');'。甚至在具有id =「<%= MyControl.ClientID%>」'的非runat-server div中。 – Igor 2014-08-29 03:42:36