【发布时间】:2012-02-13 21:58:49
【问题描述】:
我最近将一个“DataList”控件移到了一个 UserControl 中,并在我的 ASPX 页面上引用了它。 DataList 包含带有选中属性的复选框,这些属性最初由数据源分配。
<asp:DataList ID="dlspec" CssClass="specs" runat="server" GridLines="Vertical" OnItemDataBound="dlspec_ItemDataBound">
<FooterStyle BackColor="#CCCCCC" />
<AlternatingItemStyle CssClass="alt-grey" />
<SelectedItemStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="Black" Font-Bold="True" ForeColor="White" />
<ItemTemplate>
<table>
<tr>
<td class="leftcol">
<asp:Label ID="lblDimension" runat="server" Text='<%# Eval("Dimension") %>'></asp:Label>:
</td>
<td class="ProductDetailData">
<asp:Label ID="lblName" runat="server" Text='<%# Eval("Attribute") %>'></asp:Label>
</td>
<td class="find-similar">
<asp:CheckBox ID="FindSimilarCheckbox" runat="server" Checked='<%# Eval("CheckBox")=="true"? true:false %>' Text='<%# Eval("AttributeID") %>' Visible='<%# Eval("CheckBoxState")=="0"? true:false %>' />
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
现在,在用户控件绑定到的“aspx”中的按钮单击事件中,我尝试获取复选框的“选中”属性以执行一些逻辑。 我基本上使用下面的方法来找到用户控件并循环访问其中的控件。
Control SpecsPanel = FindSimilarPnl.FindControl("Specifications").FindControl("dlspec");
foreach (Control ct in SpecsPanel.Controls)
GetCheckedAttributes(ct, ref qry);
但是,在我将数据列表移入用户控件后,复选框的“已检查”属性始终为“假”。有什么想法吗?我错过了什么愚蠢的东西吗?非常感谢任何想法。让我知道如果我需要添加更多代码以便您更好地理解。 谢谢
【问题讨论】:
-
我可以建议一些关于如何以更简单的方式找到控件的建议吗?
-
您是否在加载事件中以某种方式将值初始化为 false,而不测试 IsPostBack?
-
@DJKRAZE 任何比我拥有的更好的东西都是受欢迎的。谢谢
-
@JonathanWood 我将用户控件的“数据绑定”事件包装在 !IspostBack 条件中
-
protected void Page_PreRender(object sender, EventArgs e) { if(!IsPostBack) { Pricing.DataBind(); Specifications.DisplaySpecifications(_sri, IsMobilePage);可用性.DisplayAvailability(_sri, IsMobilePage); }}
标签: c# asp.net user-controls datalist