不能转换源类型'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);
            }
        }
    }

我知道这里还有其他几个语法错误,但这个错误对我来说是一个新错误。有没有人遇到这个错误或者可以解释给我听

不能转换源类型'System.Web.UI.Control'目标类型'System.Web.UI

FindControl()返回一个类型为Control的引用。控件是TextBox的基类,因此您可以轻松地使用类型强制转换:

objCustomField = (TextBox) FindControl(oList.ID.Replace("ddl", "txt"));

你需要像这样强制转换

objCustomField = (TextBox)FindControl(oList.ID.Replace("ddl", "txt"));
相关文章: