1

我在使用 Ajax Control Toolkit ComboBox 时遇到问题。这是我的测试标记页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<div>
<asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" />
<% if (CheckBox1.Checked)
{ %><asp:ComboBox ID="ComboBox1" runat="server">
</asp:ComboBox>

<% } %>
</div>
</form>
</body>
</html>

CheckBox1 上升 PostBack 后,我在 AjaxControlToolKit.ComboBox.System.Web.UI.IPostBackDataHandler.LoadPostData(stringpostDataKey, System.Collections.Specialized.Name.ValueCollection postCollection) 方法中得到 NullReferenceException 并且 Visual Web Developer 2010 Express 询问我的路径我没有的 ComboBox.cs 类。

没有<% if { } %>ComboBox 工作正常。

谁能帮我?

4

1 回答 1

0

原因是当复选框被选中并出现回发时,组合框控件期望从客户端数据集合发布的状态隐藏字段控件存在数据。

有两种解决方法:第一个在这个答案中建议:https ://stackoverflow.com/a/12364475/360171 第二个(确实更正确)是不要使用<% ... %>表达式来隐藏服务器控件。请改为在 Page_Load 方法中使用ComboBox1.Visible = CheckBox1.Checked

此外,尽量避免<% .. %>在标记中使用表达式来对服务器控件执行任何操作。

于 2012-10-17T10:46:20.597 回答