ASP.Net ScriptControl - 从另一种方法调用一种方法

标签 asp.net javascript ajax scriptcontrol extendercontrol

假设我有两个脚本控件,其中一个控件将另一个作为子控件:

ParentControl : ScriptControl
{
   ChildControl childControl;
}

子控件的脚本:

ChildControl = function(element) 
{
  ChildControl.initializeBase(this, [element]);
}

ChildControl.prototype =
{
    callMethod: function()
    {
      return 'hi';
    },

    initialize: function() 
    {
      ChildControl.callBaseMethod(this, 'initialize');
    },

    dispose: function() 
    {
      ChildControl.callBaseMethod(this, 'dispose');
    }
}

在脚本端,我想调用子控件上的方法:

ParentControl.prototype =
{
    initialize: function() 
    {
      this._childControl = $get(this._childControlID);
      this._childControl.CallMethod();

      ParentControl.callBaseMethod(this, 'initialize');
    },

    dispose: function() 
    {
      ParentControl.callBaseMethod(this, 'dispose');
    }
}

问题是,每次我尝试时都会说找不到或不支持此方法。 ParentControl 不应该访问 ChildControl 上的所有方法吗?

是否有某种方法必须公开该方法以便 ParentControl 可以看到它?

更新 是否可以“输入” this._childControl ?

这就是我问的原因...当我使用 Watch 时,系统知道 ChildControl 类是什么,并且我可以从类本身调用方法,但是,我无法从 this._childControl 调用相同的方法目的。您可能会认为,如果内存中的类设计(?)能够识别现有的方法,那么从该类实例化的对象也会识别。

最佳答案

在客户端上,您可以通过将父控件对象的名为 _childControlID 的字段传递给 $get 来使用它。这有一些问题:

  1. _childControlID 是如何设置的?我猜测将其添加为服务器上父控件描述符中的属性,但您没有显示该代码,也没有在客户端父控件类上显示属性。
  2. $get 返回元素引用——而不是控件。因此,即使 _childControlID 设置为有效的元素 ID,该元素也不会具有名为 CallMethod 的方法。如果客户端子控件类在父控件之前初始化,则该元素将有一个名为“control”的字段,您可以使用该字段来访问将自身“附加”到该元素的脚本控件。当然,只有子控件在父控件之前初始化时,这才有效。

关于ASP.Net ScriptControl - 从另一种方法调用一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/400849/

相关文章:

asp.net - 在与 IIS 8.5 (ASP.NET) 兼容的 WEB.CONFIG 中将 HTTP 重定向到 HTTPS

javascript - jQuery:为什么下面不分配美元 '$'?

javascript - 在不刷新页面的情况下插入记录后显示 <select> 选项

javascript - 改变 HTML 页面的动画

javascript - 如何在 kaltura 中上传字幕文件?

jquery - 如何使用 Django + jQuery 修复 XSS?

c# - User.Identity.IsAuthenticated 在第一次点击时总是错误的?

.net - 从 ASP.NET 中动态生成的集合中获取选定的单选按钮

c# - ASP.NET (C#) - 与 PHP

Javascript - IP地址显示国家