也许我选择了一个完全不合适/不好的例子。 我所拥有的是一个包含一堆动态创建的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();
}
谢谢,
大卫
答案 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();