2012-10-15 50 views
1

我写了一个ASP.NET服务器控件。从自定义控件获取值

视图状态完美的作品,但是当我试图让我与它的公共即时方法自定义控制的控制值,它带给我的异常,有没有用这个ID控制。

+0

显示一些代码,请。 –

回答

1

如果您想从自定义控件中获取值,则必须在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; 
+0

我的ID包含静态(“cmbFromDate_”)和动态(ColumnName) – TIKSN

+0

我遇到了类似的问题,不幸的是这是我唯一的解决方案。我知道在Init事件上使用ID是有限制的,但这会为将来的问题节省开支。 – StrouMfios

0

当您创建一个自定义的控制,即起标识自定义控制为一体的实体,你没有得到你的自定义控件直达各个控件的页面。

要获得自定义控件的各个元素的属性值,你应该在这反过来包装定制控件内的各个控制您的自定义控制定义属性。

但是,你总是可以得到在用户控件本身包含控件的值(不是在页面上放置它,但在控制代码本身)。您还可以在自定义控件中编写事件以使其交互。

+0

我正在使用.FindControl(ID)方法,它给我带来了错误。 – TIKSN

+0

另一个问题是我有3个组合,并且可能有另一个组合。 – TIKSN

+0

确保你可以拥有尽可能多的组合。使用FindControl(ID)不是问题。但它不是很方便。在用户控件中定义属性时,必须先将其转换为适当的类型,然后才能访问实例属性。完成后,您还可以通过usercontrol引发事件。 –