2011-02-28 40 views
0

也許我選擇了一個完全不合適的/不好的例子。 我擁有的是一個包含一堆動態創建的Telerik RadGrid的用戶控件。 我的用戶控件被添加到一對Telerik RadPageView中,它們是與RadTabStrip一起使用的RadMultiPage的一部分。 我需要做的是在我的用戶控件中調用一個Javascript函數來更新它的顯示,只要它的父RadPageView被選中。 所以基本上,我有以下的Javascript代碼:使用客戶端API進行用戶控制

function OnClientTabSelected(sender, args) 
{ 
    // Get the MyControl that is on this tab 
    var myControl = $find("whatever"); 

    // Call a method that updates the display 
    myControl.doSomething(); 
} 

感謝,

大衛

+0

你能從這個問題,你的問題得到線索:http://www.telerik.com/community/forums/aspnet -ajax /標籤欄/ radgrid控件-onselectedindexchange到更新radpageview.aspx – JPReddy 2011-02-28 17:46:08

+0

而不是使用JavaScript來更新控制可能是你應該嘗試一些其他的手段,如在上面的鏈接 – JPReddy 2011-02-28 17:46:49

回答

3

您可以在用戶控件中添加包裝div,然後使用jQuery擴展該div以添加所需的方法和屬性。訣竅是設置div的id ='<%= this.ID%>' - 這樣div與用戶控件具有相同的ID(這很好,因爲用戶控件實際上沒有渲染任何東西 - 只有其內容)。

然後回到您的包含頁面上,您可以使用$ get('whatever')引用您的UserControl的ID,並且實際上您將選擇擴展的div ..其中將包含您的所有方法和屬性。

這種方法的好處在於,所有的方法和屬性以及整潔的範圍,沒有任何東西在全局命名空間中。

我有一個完整的解決方案的演示,在這裏詳細信息,如果您想了解更多信息: http://programmerramblings.blogspot.com/2011/07/clientside-api-for-aspnet-user-controls.html

+0

看起來不錯。我一定會詳細檢查它。 – dlarkin77 2011-08-02 08:40:44

0

你應該控制方法public

public void doSomething 

,並從

的頁面調用這個
myControl1.doSomething(); 
+0

AJAX我應該提到,DoSomething的是一個Javascript方法。 – dlarkin77 2011-02-28 12:44:51

+0

對不起,應該更好地閱讀這個問題。你可以發佈你的按鈕點擊和doSomething方法的代碼。 – 2011-02-28 13:03:03

+0

//按鈕的點擊處理 功能測試() { $找到( 「<%= myControl1.ClientID%>」)的doSomething(); } // MyControl的doSomething方法 function doSomething() { alert(new Date()); } – dlarkin77 2011-02-28 13:32:27

2

如果您確定該函數的名稱,只需在輸入按鈕中調用javascript方法即可。

<input type="button" value="test" onclick="doSomething()" /> 

如果放在將在頁面上吐了控制任何JavaScript代碼,這將是可供調用提供他們兩人都是以相同的形式。

例如,如果您查看該頁面的源代碼,您的代碼將如下所示。

<script type="text/javascript">  
    function doSomething() 
    { 
     alert(new Date()); 
    } 
</script> 

<div> 
    <span id="MyControl1_Label1">Dummy label</span> 
</div> 
<hr /> 
<input type="button" value="test" onclick="doSomething()" /> 

編輯:這是不是訪問在我看來這些方法的好方法。當你在一個控件中放入一些javascript代碼時,它應該只用在那個控件中(沒有規則,它只是一個設計建議)。如果您試圖從該控件外部訪問控件的JavaScript代碼,那麼您需要重新訪問您的設計。

如果您可以給我們提供更多關於爲什麼要訪問該方法的詳細信息,也許我們可以建議一些更好的方法來實現這一點。

更新 :(因爲您已經修改了您的問題):有點棘手來回答這個問題,因爲我沒有掌握Rad控件的經驗。我想應該有一些功能可以幫助你在不使用javascript的情況下更新該頁面中的控件,可能會看看爲Rad提供的客戶端API。

可能有人知道RAD控件會幫助你。

+0

非常感謝示例代碼。但是,我將如何使用MyControl的實例去調用doSomething? ie:var x = 的一個實例; x.doSomething(); – dlarkin77 2011-02-28 14:48:10

+0

@ dlarkin77:javascript方法不屬於任何控件,一旦您的頁面顯示在瀏覽器中,它就是該頁面的一部分,並且控件和javascript之間沒有鏈接。如果您在該頁面中放置多個相同控件的實例,那麼多次JavaScript代碼將在頁面上吐出,但之後它們不會鏈接到任何實例。 – JPReddy 2011-02-28 14:57:35

+0

我編輯了我的原始問題(希望),讓我更好地達成目標。 – dlarkin77 2011-02-28 15:57:56