使用客户端API进行用户控制

时间:2011-02-28 11:47:17

标签: javascript asp.net user-controls rad

也许我选择了一个完全不合适/不好的例子。 我所拥有的是一个包含一堆动态创建的Telerik RadGrids的用户控件。 我的用户控件被添加到几个Telerik RadPageViews中,这些RadViewViews是与RadTabStrip一起使用的RadMultiPage的一部分。 我需要做的是在我的usercontrol中调用Javascript函数,以便在选择父RadPageView时更新它的显示。 所以基本上我有以下Javascript代码:

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();
}

谢谢,

大卫

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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提供的clientside-API。

可能有人知道RAD控件会帮助你。

答案 2 :(得分:0)

您应该将控制方法设为公开

public void doSomething

并从页面中调用

myControl1.doSomething();