C#,ASP.NET-NullReferenceException-对象引用未设置为对象的实例

时间:2020-03-06 15:02:18  来源:igfitidea点击:

使用中的变量的定义:

Guid fldProId = (Guid)ffdPro.GetProperty("FieldId");
string fldProValue = (string)ffdPro.GetProperty("FieldValue");
FormFieldDef fmProFldDef = new FormFieldDef();
fmProFldDef.Key = fldProId;
fmProFldDef.Retrieve();
string fldProName = (string)fmProFldDef.GetProperty("FieldName");
string fldProType = (string)fmProFldDef.GetProperty("FieldType");

给出问题的行(特别是第4行(hTxtBox.Text = ...)):

if (fldProType.ToLower() == "textbox")
{
    Label hTxtBox = (Label)findControl(fldProName);
    hTxtBox.Text = fldProValue;
}

所有数据都是从数据库中正确收集的,但是标签很容易弄错。有任何想法吗?

解决方案

看起来fmProFldDef的FieldName属性是螺丝钉。我们是否验证了它正在获取hTxtBox的客户端ID?

这行返回null:

Label hTxtBox = (Label)findControl(fldProName);

可能是" FieldName"不存在的结果(因此此行返回null,然后在查找中使用null)

string fldProName = (string)fmProFldDef.GetProperty("FieldName");

或者FieldName中的文本不代表表单字段。

我们确定findControl返回一个值吗?

hTxtBox.Text是否是对可能引发NullReferenceException的集合进行任何计算的属性?

findControl返回一个空值。可能是特定的Label不是当前页面的直接子级,即在UpdatePanel或者其他控件中,因此该控件的实际名称与所应用的名称不同(因此找不到它)。 。例如,如果将其命名为" name",则实际名称可能是ctl0 $ content $ name,因为它嵌套在页面上的另一个控件中。

我们实际上没有提供足够的有关上下文的信息,无法让我给我们一个更好的答案。

FindControl可能无法看到该文本框是否在数据绑定控件(例如ListView,FormView等)中?