Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';无法访问自定义控件_C#_Asp.net_Controls_Webforms_Custom Controls - Fatal编程技术网

C# Can';无法访问自定义控件

C# Can';无法访问自定义控件,c#,asp.net,controls,webforms,custom-controls,C#,Asp.net,Controls,Webforms,Custom Controls,我的web窗体上有一个自定义控件: <form id="form" runat="server"> <clc:CustomList ID="myList" runat="server" AddButtonText="add" DeleteButtonText="del" MoveUpButtonText="up" MoveDownButtonText="down"/

我的web窗体上有一个自定义控件:

<form id="form" runat="server">
      <clc:CustomList 
        ID="myList" 
        runat="server" 
        AddButtonText="add"
        DeleteButtonText="del"
        MoveUpButtonText="up"
        MoveDownButtonText="down"/>
        <div id="test" runat="server"></div>
</form>

我需要从静态WebMethod访问此控件。 我从当前HttpContext获取页面对象,但是这个页面对象似乎没有控件(控件计数为0)

[WebMethod]
公共静态列表GetListItems()
{
Page Page=HttpContext.Current.Handler作为页面;
控制=空;
如果(第页!=null)
{
control=FindControlRecursive(第页,“myList”);
}
返回null;
}
私有静态控件FindControlRecursive(控件根,字符串id)
{
if(root.ID==ID)
{
返回根;
}
foreach(root.Controls中的控件c)
{
控件t=FindControlRecursive(c,id);
如果(t!=null)
{
返回t;
}
}
返回null;
}
知道为什么或者如何控制我吗?
谢谢

尝试在页面内使用标准控件。
如果您可以通过ID找到它,那么您可能在注册自定义控件时出错(也许您可以提供所有的aspx代码?)。
还要注意,
Page
类有一个内置的
FindControl
方法

例如,这应该起作用:

<form id="form1" runat="server">
<div>
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</div>
</form>

无法从page方法中访问page实例的大多数属性和方法以及该页上的所有控件。为什么?由于page方法调用不是回发,这意味着它不会经历页面生命周期,因此viewstate不可用,并且不会创建控件。尝试改用UpdatePanel。

静态成员不能引用实例引用。您需要从类中的其他实例方法传入对HttpContext或页面本身的引用。我认为您需要使用如下参数调用静态web服务:

protected void Page_Load(object sender, EventArgs e) {
    var tb = GetListItems(this);
}

[WebMethod]
public static List<CustomListControl.IListItem> GetListItems(System.Web.UI.Page page)
{
    var c = null;    

    if (page != null)
    {
        c = page.FindControl("myList");
    }
    return c;
}
受保护的无效页面加载(对象发送方,事件参数e){
var tb=GetListItems(此项);
}
[网络方法]
公共静态列表GetListItems(System.Web.UI.Page)
{
var c=null;
如果(第页!=null)
{
c=page.FindControl(“myList”);
}
返回c;
}

我可以通过页面加载事件进行控制。我无法从静态WebMethod访问它(似乎我从当前HttpContext获得的页面对象不是真正的页面对象:>)…我有一个自定义控件(具有内联编辑、jQuery拖放、添加和删除功能的项目列表)。当客户端进行更改时,必须将新状态(ajax)发布到服务器(控件)。如何从UpdatePanel捕获这些事件?在自定义控件中创建UpdatePanel是否更好?我需要这样的东西:带有操作的自定义控件,当控件上发生某些事件时,这些操作使ajax从客户端发布到服务器。有什么办法吗?默认情况下,更新面板中的所有回发控件都会触发部分回发。您还可以将UpdatePanel之外的控件作为触发器,或者使用_doPostBack使用javascript手动触发部分回发。您的控件应该发布一个事件,您可以从页面订阅该事件,然后您可以将代码逻辑放入事件处理程序中。
protected void Page_Load(object sender, EventArgs e) {
    var tb = FindControl("TextBox1");
}
protected void Page_Load(object sender, EventArgs e) {
    var tb = GetListItems(this);
}

[WebMethod]
public static List<CustomListControl.IListItem> GetListItems(System.Web.UI.Page page)
{
    var c = null;    

    if (page != null)
    {
        c = page.FindControl("myList");
    }
    return c;
}