2011-02-28 41 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