【问题标题】:User control with a client side API使用客户端 API 进行用户控制
【发布时间】:2011-02-28 11:47:17
【问题描述】:

也许我选择了一个完全不恰当/糟糕的例子。 我拥有的是一个用户控件,其中包含一堆动态创建的 Telerik RadGrids。 我的用户控件被添加到几个 Telerik RadPageViews,它们是与 RadTabStrip 一起使用的 RadMultiPage 的一部分。 我需要做的是在我的用户控件中调用一个 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();
}

谢谢,

大卫

【问题讨论】:

标签: javascript asp.net user-controls rad


【解决方案1】:

您可以在您的用户控件中添加一个包装 div,然后使用 jQuery 扩展该 div 以添加您想要的方法和属性。诀窍是设置 div 的 id='' - 这样 div 具有与用户控件相同的 ID(这很好,因为用户控件实际上并没有呈现任何东西 - 只有它的内容)。

然后回到您的包含页面,您可以使用 $get('whatever') 引用您的 UserControl 的 ID - 您实际上将选择您的扩展 div.. 它将包含您的所有方法和属性。

这种方法的好处是您的所有方法和属性都在范围内,并且没有任何东西在全局命名空间中。

如果您想了解更多信息,我在此处提供了完整的演示解决方案和详细信息: http://programmerramblings.blogspot.com/2011/07/clientside-api-for-aspnet-user-controls.html

【讨论】:

  • 看起来不错。我一定会详细检查的。
【解决方案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 控件的人会帮助您。

【讨论】:

  • 非常感谢示例代码。但是我将如何使用 MyControl 的实例调用 doSomething 呢?即: var x = ; x.doSomething();
  • @dlarkin77: javascript 方法本身不属于任何控件,一旦您的页面显示在浏览器中,它就是该页面的一部分,并且控件和 javascript 之间没有链接。如果您在该页面中放置同一个控件的多个实例,那么多次 javascript 代码将被吐在页面上,但之后它们不会链接到任何实例。
  • 我已经编辑了我的原始问题,以便(希望)更好地了解我想要实现的目标。
【解决方案3】:

你应该公开控制方法

public void doSomething

并从页面调用它

myControl1.doSomething();

【讨论】:

  • 我应该提到 doSomething 是一种 Javascript 方法。
  • 对不起,应该更好地阅读这个问题。你能发布你的按钮点击和doSomething方法的代码吗?
  • // 按钮的点击处理函数 test() { $find("").doSomething(); } // MyControl 的 doSomething 方法 function doSomething() { alert(new Date()); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多