在项目中,我有一些用于表单元素的自定义 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;
}
出于某种原因,即使我单步执行代码并看到“控制”被分配给我的 Web 用户控制,“if”语句也总是返回 false。此代码在项目的另一个位置完全相同,除了在另一个位置使用标准 .net 控件“TextBox”和“DropDownList”,而在另一个位置代码可以工作。
有人知道为什么这不适用于网络用户控件吗?
更新:嗯,所以在调试中我发现了这个:
?control.GetType();
BaseType: {Name = "DropDownListField" FullName = "WebUI.UserControls.Fields.DropDownListField"}
?typeof(DropDownListField);
BaseType: {Name = "UserControl" FullName = "System.Web.UI.UserControl"}
所以 typeof 只是认识到它们是用户控件,而不是看起来的完整类型。
有人知道我将如何检查特定的用户控件类型吗?