asp.net AJAX 工具包组合框异常AjaxControlToolkit.dll中出现系统错误,

jdg4fx2g  于 2023-03-09  发布在  .NET
关注(0)|答案(1)|浏览(108)

我有一个 AJAX 工具包组合框在我的网页。这个组合框是隐藏的一些用户和绑定,我必须从另一个下拉菜单中选择一个值。<% if (HasnPermissions) { %> <ajaxToolkit:ComboBox ID="cbTest" runat="server" CssClass="searchContentCombobox" ItemInsertLocation="OrdinalText" /> <% } %>和所选的下拉菜单:<asp:DropDownList CssClass="dropDownStyle1" ID="cboOwner" runat="server" AutoPostBack="True" OnSelectedIndexChanged="cboOwner_SelectedIndexChanged"> </asp:DropDownList>
在后面的代码上

protected void cboOwner_SelectedIndexChanged(object sender, EventArgs e)
        {     
          BindCombo(null);
        }

 private void BindCombo()
        {
       cbTest.Items.Insert(0, new ListItem("none", "0"));
       }

当用户有权访问此组合框时,该组合框工作正常,但当用户无权查看时,我在图片中看到错误,调试器未进入方法cboOwner_SelectedIndexChanged。
我试着把Bind方法放到页面加载中也是同样的问题System.NullReferenceException:'对象引用未设置为对象的示例。'从AjaxControlToolkit.dll中已知的除外

nhaq1z21

nhaq1z211#

我会使用style来显示/隐藏控件。那些aj控件在页面加载时会做一大堆初始化代码,页面上的条件代码会成为问题matic。
更糟糕的是,代码背后的事件可能必须存在。
因此,将代码移动到"页面加载事件",并在页面加载时隐藏/显示。
换句话说,不要添加基于内联条件代码的控件,而是让/have/setup/enjoy/假设控件始终存在,这样,大量的移动部件可以运行以设置该控件,使其正确工作。
所以,只要隐藏show,但是让/allow/have/set控件存在于页面上,这样事件背后的代码"也"不需要有条件地添加/删除。而且,由于代码背后是一个页面类,那么无论如何,该解决方案都会在编译时发生。
因此,假设您要隐藏/显示以下内容:

<div id="MyHideShowExample" runat="server">

        <ajaxtoolkit:combobox id="cbTest" runat="server"
            cssclass="searchContentCombobox"
            iteminsertlocation="OrdinalText" />

        <asp:DropDownList CssClass="dropDownStyle1"
            ID="cboOwner" runat="server" AutoPostBack="True"
            OnSelectedIndexChanged="cboOwner_SelectedIndexChanged">
        </asp:DropDownList>

    </div>

因此,假设在页面加载时,则为:

protected void Page_Load(object sender, EventArgs e)
    {
        if (HasnPermissions)
        {
            MyHideShowExample.Style.Add("display", "inline");
        }
        else
        {
            MyHideShowExample.Style.Add("display", "none");
        }
    }

因此,不要尝试有条件地注入服务器端控件。它们是在编译时解析的,而不是在运行时,如果你试图连接服务器端代码(代码隐藏)和页面上的标记服务器端控件,你会遭受很大的痛苦。在这里你有编译时解析是一件"伟大"的事情。
我在上面使用了一个"div",以防有一组控件,或者多个控件。如果你愿意,你也可以直接对控件使用样式隐藏/显示,但是对于一个"组",那么就用服务器端标记将它们 Package 在一个div中,这样后面的代码就可以轻松地控制该内容的显示/隐藏。

相关问题