无法将源类型'System.Web.UI.Control'转换为目标类型'System.Web.UI.WebControls.TextBox'

时间:2015-10-21 16:31:09

标签: c#

我有以下代码行

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

我从使用visual basic .net编写的遗留应用程序继承了此页面,我将其转换为c#。

此特定行会引发此错误:

  

无法将源类型'System.Web.UI.Control'转换为目标类型'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);
            }

        }

    }

我知道其中还有其他一些语法错误,但这个错误对我来说是个新错误。有没有人遇到过这个错误,或者可能会向我解释

2 个答案:

答案 0 :(得分:1)

你需要像这样施展

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

答案 1 :(得分:1)

FindControl()会返回Control类型的引用。 Control是TextBox的基类,因此您可以轻松使用类型转换:

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