不能转换源类型'System.Web.UI.Control'目标类型'System.Web.UI
本文关键字:Web UI 类型 System 目标 Control 不能 转换 | 更新日期: 2023-09-27 18:18:51
我有以下代码行
objCustomField = FindControl(oList.ID.Replace("ddl", "txt"));
我从一个用visual basic .net编写的遗留应用程序中继承了这个页面,我正在将其转换为c#。
这一行抛出以下错误:
无法转换源类型'System.Web.UI '。控件'到目标类型'System.Web.UI.WebControls.TextBox'
这是包含它的整个例程:
private void PopulateDecodeDropDown(ref DropDownList oList, string vListItems, int vValueIndex, int vTextIndex, string vSelectedValue, string vCustomText , ref TextBox oCustomField, bool vIncludeBlank = true, string vBlankText = "", string vBlankValue = "")
{
TextBox objCustomField = default(TextBox);
ListItem objItem = default(ListItem);
string[] arItems = vListItems.Split(Convert.ToChar("|")); //added syntax to convert from string to Char 10/21/15 Max //
oList.Items.Clear();
if (vIncludeBlank == true)
{
objItem = new ListItem();
var _with7 = objItem;
objItem.Value = vBlankValue;
objItem.Text = vBlankText;
oList.Items.Add(objItem);
}
if (!string.IsNullOrEmpty(vCustomText))
{
objItem = new ListItem();
var _with8 = objItem;
objItem.Value = "-1";
objItem.Text = vCustomText;
oList.Items.Add(objItem);
}
for (n = 0; n <= arItems.Count() - 1; n++)
{
objItem = new ListItem();
var _with9 = objItem;
objItem.Value = mobjFormat.StripObjectToString(arItems[n]); //added square brackets to arItems to facilitate array 10/21/15 Max //
objItem.Text = mobjFormat.StripObjectToString(arItems[n]); //added square brackets to arItems to facilitate array 10/21/15 Max //
oList.Items.Add(objItem);
}
try
{
//set the value
oList.SelectedValue = vSelectedValue;
//if for some reason the value selected is different then
//we need to show custom something when wrong
if (oList.SelectedValue != vSelectedValue)
{
if (!string.IsNullOrEmpty(vCustomText))
{
objCustomField = FindControl(oList.ID.Replace("ddl", "txt"));
//DropDownList objCustomField = (DropDownList) FindControl(oList.ID.Replace("ddl", "txt"));
oList.SelectedValue = "-1"; //added double quotes to facilitate conversion to string 10/21/15 Max //
oCustomField.Text = vSelectedValue;
oCustomField.Style.Add("display", ""); //changed to c# syntax 10/21/15 Max //
}
else
{
objItem = new ListItem();
var _with10 = objItem;
objItem.Value = Strings.Trim(arItems(vSelectedValue));
objItem.Text = Strings.Trim(arItems(vSelectedValue));
oList.Items.Add(objItem);
}
}
}
catch (Exception ex)
{
if (!string.IsNullOrEmpty(vCustomText))
{
objCustomField = FindControl(oList.ID.Replace("ddl", "txt"));
oList.SelectedValue = -1;
oCustomField.Text = vSelectedValue;
oCustomField.Style.Item("display") = "";
}
else
{
objItem = new ListItem();
var _with11 = objItem;
objItem.Value = Strings.Trim(arItems(vSelectedValue));
objItem.Text = Strings.Trim(arItems(vSelectedValue));
oList.Items.Add(objItem);
}
}
}
我知道这里还有其他几个语法错误,但这个错误对我来说是一个新错误。有没有人遇到这个错误或者可以解释给我听
FindControl()
返回一个类型为Control
的引用。控件是TextBox的基类,因此您可以轻松地使用类型强制转换:
objCustomField = (TextBox) FindControl(oList.ID.Replace("ddl", "txt"));
你需要像这样强制转换
objCustomField = (TextBox)FindControl(oList.ID.Replace("ddl", "txt"));