Asp.net 从自定义控件获取值

Asp.net 从自定义控件获取值,asp.net,custom-controls,servercontrols,Asp.net,Custom Controls,Servercontrols,我已经编写了一个ASP.NET服务器控件 视图状态工作得很好,但当我试图使用其公共即时方法在自定义控件上获取控件的值时,它会给我带来一个异常,即没有具有该ID的控件。当创建自定义控件时,向前的页面将自定义控件标识为一个实体,您无法直接访问自定义控件中的各个控件 要获取自定义控件的各个元素的属性值,应在自定义控件中定义属性,这些属性反过来将单个控件包装到自定义控件中 但是,您始终可以在用户控件本身(不是在放置控件的页面中,而是在控件代码本身)中获取包含控件的值。您还可以在自定义控件中写入事件以使其

我已经编写了一个ASP.NET服务器控件


视图状态工作得很好,但当我试图使用其公共即时方法在自定义控件上获取控件的值时,它会给我带来一个异常,即没有具有该ID的控件。

当创建自定义控件时,向前的页面将自定义控件标识为一个实体,您无法直接访问自定义控件中的各个控件

要获取自定义控件的各个元素的属性值,应在自定义控件中定义属性,这些属性反过来将单个控件包装到自定义控件中


但是,您始终可以在用户控件本身(不是在放置控件的页面中,而是在控件代码本身)中获取包含控件的值。您还可以在自定义控件中写入事件以使其进行交互。

创建自定义控件时,将该自定义控件标识为一个实体的页面,您无法直接访问自定义控件中的各个控件

要获取自定义控件的各个元素的属性值,应在自定义控件中定义属性,这些属性反过来将单个控件包装到自定义控件中


但是,您始终可以在用户控件本身(不是在放置控件的页面中,而是在控件代码本身)中获取包含控件的值。您还可以在自定义控件中写入事件以使其进行交互。

如果要从自定义控件中获取值,必须在OnInit事件中注册控件

//Register your controls
protected override void OnInit(EventArgs e) {
        var controlName = (Type)LoadControl("~/path.ascx");
        controlName.ID = "YOU_MUST_SET_AN_ID";
        placeholder.Controls.Add(controlName);
}


//get your controls (add the following in any method you like)
var controlNameCtrl = (Type)placeholder.FindControl("CONTROLID");
var propertyValue = controlNameCtrl.PropertyName;

如果要从自定义控件获取值,必须在OnInit事件中注册控件

//Register your controls
protected override void OnInit(EventArgs e) {
        var controlName = (Type)LoadControl("~/path.ascx");
        controlName.ID = "YOU_MUST_SET_AN_ID";
        placeholder.Controls.Add(controlName);
}


//get your controls (add the following in any method you like)
var controlNameCtrl = (Type)placeholder.FindControl("CONTROLID");
var propertyValue = controlNameCtrl.PropertyName;

我正在使用.FindControl(ID)方法,这给我带来了错误。另一个问题是,我有3个组合,也可能有另一个组合。请确保可以有任意多个组合。使用FindControl(ID)不是问题。但是它不是很方便。在用户控件中定义属性时,必须将其强制转换为正确的类型,然后才能访问实例属性。这样做之后,您还可以从usercontrol引发事件。这三个组合框是日期间隔类、from和to值。但是可以有多个,这对你来说绝对有效。在用户控件中定义名为interval的属性。将逻辑放在getter中,在从所有三个组合框的值计算它之后,它将返回最终间隔。我使用的是.FindControl(ID)方法,它在这一点上给我带来了错误。另一个问题是,我有三个组合,也可能有另一个组合。请确保您可以拥有任意多个组合。使用FindControl(ID)不是问题。但是它不是很方便。在用户控件中定义属性时,必须将其强制转换为正确的类型,然后才能访问实例属性。这样做之后,您还可以从usercontrol引发事件。这三个组合框是日期间隔类、from和to值。但是可以有多个,这对你来说绝对有效。在用户控件中定义名为interval的属性。将逻辑放在getter中,它在根据所有三个组合框的值计算it后返回最终间隔。我的ID包含static(“cmbFromDate”)和dynamic(ColumnName)。我曾经遇到过类似的问题,不幸的是,这是我唯一的解决方案。我知道在Init事件中使用ID是有限制的,但这将为将来的问题节省您的时间。我的ID包含静态(“cmbFromDate_u2;”)和动态(ColumnName),我曾经遇到过类似的问题,不幸的是,这是我提供的唯一解决方案。我知道在Init事件中使用ID是有限制的,但这将为将来的问题节省您的时间。