在Tabcontainer中放置组合框时,获取“对象引用未设置为对象的实例”错误

时间:2012-09-11 04:14:13

标签: asp.net

我有一个带有两个选项卡的Ajaxtoolkit Tabcontainer,其中第二个选项卡启用为False。 我在第二个选项卡中放置了一个Combobox AjaxToolikit控件。但是当IE浏览器中的服务器发生回发时,我得到以下错误。 但是在Firefox中我没有问题,而且每件事都能正常运行。 怎么了?

这是我的代码:

     <ul>
          <li>
                        <asp:ImageButton ID="BtnNew" CausesValidation="false" runat="server" ImageUrl="~/CssImages/new_document.png"
                            ToolTip="New" Width="20px" OnClick="BtnNew_Click" /></li>
</ul>


 <cc1:TabContainer ID="TabContainer1" runat="server">
    <cc1:TabPanel runat="server" ID="Tab1" HeaderText="xx">
    <ContentTemplate>
    xx
    </ContentTemplate>
    </cc1:TabPanel>
    <cc1:TabPanel runat="server" ID="TabPanel1" HeaderText="yy"  Enabled="false">
    <ContentTemplate>
    dsds <cc1:ComboBox ID="ComboBox1" runat="server">
        <asp:ListItem>loblob</asp:ListItem>
        </cc1:ComboBox>
    </ContentTemplate>

    </cc1:TabPanel>
    </cc1:TabContainer>

错误:

 Object reference not set to an instance of an object. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.



Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   AjaxControlToolkit.ComboBox.LoadPostData(String postDataKey, NameValueCollection postCollection) +168
   AjaxControlToolkit.ComboBox.System.Web.UI.IPostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +57
   System.Web.UI.Page.ProcessPostData(NameValueCollection postData, Boolean fBeforeLoad) +690
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1743

2 个答案:

答案 0 :(得分:1)

我认为IE不会向服务器禁用表单元素以及禁用容器中的元素提交。有很多方法可以解决这个问题。最简单的方法是禁用ComboBox控件并使用父选项卡控件启用它。 更一般的决定是修复AjaxControlToolkit库中的ComboBox源代码。为此,您需要下载库源并更改LoadPostData文件中Server/AjaxControlToolkit/ComboBox/ComboBox.cs方法的第一行,如下所示:

protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
{
    if (!Enabled || postCollection.GetValues(HiddenFieldControl.UniqueID) == null)
        return false;

    //...
}

答案 1 :(得分:0)

我遇到了这个问题,即使我没有使用任何隐藏的面板/控件。 事实证明,后面的designer.cs正在为我生成ComboBox控件,即使它们已经在.aspx中注释了。

删除我已注释掉的实验/提醒代码,一切正常。

生成的控件就好像被隐藏了一样 - 在回发时弹出了同样的异常。