【发布时间】:2011-06-24 08:24:19
【问题描述】:
在项目中,我有一些用于表单元素的自定义 WebUserControl(它们封装了一些标准验证器和其他系统特定功能)。我的用户控件是“DropDownListField”和“TextBoxField”。在页面后面的代码中,我有以下代码:
string parameterValue = null;
foreach (object control in myMultiView.Views[myMultiView.ActiveViewIndex].Controls)
{
if (control.GetType() == typeof(DropDownListField))
parameterValue = ((DropDownListField)control).Value;
if (control.GetType() == typeof(TextBoxField))
parameterValue = ((TextBoxField)control).Value;
}
由于某种原因,“if”语句总是返回 false,即使我单步执行代码并看到“控件”被分配给我的 Web 用户控件。此代码在项目中的另一个位置完全相同,只是在另一个位置使用标准 .net 控件“TextBox”和“DropDownList”,而在另一个位置代码可以工作。
有人知道为什么这不适用于网络用户控件吗?
更新: 嗯,所以在调试时我发现了这个:
?control.GetType();
BaseType: {Name = "DropDownListField" FullName = "WebUI.UserControls.Fields.DropDownListField"}
?typeof(DropDownListField);
BaseType: {Name = "UserControl" FullName = "System.Web.UI.UserControl"}
所以 typeof 只是认识到它们是用户控件,而不是看起来的完整类型。
有人知道我将如何检查特定的用户控件类型吗?
【问题讨论】:
-
我猜它们不是同一类型,使用调试找出实际类型。
标签: c# asp.net gettype webusercontrol