你调用的对象是空的

时间:2014-01-18 15:59:03

标签: asp.net c#-4.0

我有一个列intrestedFields的下拉列表,我在该下拉列表中添加了ListItem属性

现在问题是当我把这个intrest_field()方法放回回发时,ListItem属性没有显示, 当我把它放在回发之外时,会显示listitem属性,但是我的另一个下拉列表项没有显示,并且还显示错误“对象引用未设置为对象的内容”。

我尝试过PreRender,但同样的问题也出现了。

.cs代码

 if (!IsPostBack)
    {
        intrest_field();
    }

 public void intrest_field()

{

    ListItem l1 = new ListItem();
    l1 = drpfield.Items.FindByValue("1");
    l1.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l1.Attributes.Add("disabled", "true");
    l1.Value = "-1";

    ListItem l2 = drpfield.Items.FindByValue("2");
    l2.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l2.Attributes.Add("disabled", "true");
    l2.Value = "-1";

    ListItem l3 = drpfield.Items.FindByValue("3");
    l3.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l3.Attributes.Add("disabled", "true");
    l3.Value = "-1";


}

.aspx代码

<asp:DropDownList ID="drpfield" runat="server" Height="20px" Width="190px" 
                    AutoPostBack="True">

                    <asp:ListItem Value="1">Top Categories</asp:ListItem>
                    <asp:ListItem >Accounts</asp:ListItem>
                    <asp:ListItem Value="2">Financial </asp:ListItem>
                    <asp:ListItem>ITES</asp:ListItem>
                    <asp:ListItem Value="3">HR</asp:ListItem>
                    <asp:ListItem>Marketing</asp:ListItem>    </asp:DropDownList>

此l1.attributes.add样式丢失后, 当我把intrest_field()放在

protected void drpfield_PreRender(object sender, EventArgs e)
    {}

它有效但我的另一个下拉列表项目没有显示

即从drpfield中选择项目后,当我从另一个下拉列表国家/地区选择项目时,它没有显示状态。 没有使用dropdownlist drpfield它可以工作

可能有什么问题?

1 个答案:

答案 0 :(得分:0)

你做错了。例如,您正在按值“1”查找项目,更改为“-1”,并且在回发后您尝试按值“1”查找该项目,该项目不再存在!

l1 = drpfield.Items.FindByValue("1");
... ... ...
l1.Value = "-1";

我建议不要将值更改为-1:

protected void Page_Load(object sender, EventArgs e)
{
    intrest_field();
}

public void intrest_field()
{

    ListItem l1 = new ListItem();
    l1 = drpfield.Items.FindByValue("1");
    l1.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l1.Attributes.Add("disabled", "true");
    //l1.Value = "-1";

    ListItem l2 = drpfield.Items.FindByValue("2");
    l2.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l2.Attributes.Add("disabled", "true");
    //l2.Value = "-1";

    ListItem l3 = drpfield.Items.FindByValue("3");
    l3.Attributes.Add("style", "color:gray;font-weight:bold;font-size:larger");
    l3.Attributes.Add("disabled", "true");
    //l3.Value = "-1";
}

如果有理由将值设置为-1,那么应该有办法以其他方式进行。

如果你保持`l1.Value =“ - 1”,你可以检查l1当然是否为null,但是在回发后它将为null并且不会应用属性。

相关问题