我的页面里面有一个DataList,DataList里面的ItemTemplate是从其他地方加载进来的,代码如下:
DataList dlMenu = (DataList)e.Item.FindControl("rep_menu");
dlMenu.ItemTemplate = Page.LoadTemplate("~/Admin/UserControls/NewDayMenu.ascx");
而NewDayMenu.ascx 里面的代码是这样的:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="NewDayMenu.ascx.cs" Inherits="Admin_UserControls_NewDayMenu" %>
<asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("MenuName") %>' Checked='<%# Eval("IsAlways") %>' TextAlign="Left" />
<asp:HiddenField ID="hd_MenuId" Value='<%# Eval("MenuId") %>' runat="server" />
==================问题分割线==============
现在的问题是,我想要取得hd_MenuI的值,却是怎么样也取不到。
foreach( DataListItem item in dl.Items)
{
HiddenField hd_m = (HiddenField)item.FindControl("hd_MenuId");
}
在这里hd_m的值总是Null。请教一下各位高手,这种情况下应该怎么取得子控件的。
你的方法没错。
可能是哪里写的有问题。思路是没问题的
HiddenField hd_m = (HiddenField)(item.FindControl("hd_MenuId"));
你需要先找到ItemTemplate 中的自定义控件NewDayMenu,然后再从自定义控件中去找HiddenField 和CheckBox.
Code
foreach( DataListItem item in dl.Items)
{
NewDayMenu ndm = item.FindControl("NewDayMenu1") as NewDayMenu ;
HiddenField hd_m = ndm .FindControl("hd_MenuId") as HiddenField;
}
再细细看看NewDayMenu.ascx 里面的代码