我有以下代码行
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);
}
}
}
我知道其中还有其他一些语法错误,但这个错误对我来说是个新错误。有没有人遇到过这个错误,或者可能会向我解释
答案 0 :(得分:1)
你需要像这样施展
objCustomField = (TextBox)FindControl(oList.ID.Replace("ddl", "txt"));
答案 1 :(得分:1)
FindControl()
会返回Control
类型的引用。 Control是TextBox的基类,因此您可以轻松使用类型转换:
objCustomField = (TextBox) FindControl(oList.ID.Replace("ddl", "txt"));