我使用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工作正常。
任何人都可以帮助我吗?
答案 0 :(得分:0)
原因是当复选框被检查并且回发出现时,组合框控件期望从客户端数据收集中发布存在的状态隐藏字段控件的数据。
有两种可用的解决方法:本回答中建议的第一个:https://stackoverflow.com/a/12364475/360171
第二个(确实更正确)是不使用<% ... %>
表达式来隐藏服务器控件。请改用Page_Load方法中的ComboBox1.Visible = CheckBox1.Checked
。
此外,尽量避免使用标记中的<% .. %>
表达式来执行对服务器控件的任何操作。