我有以下中继器:
<asp:Repeater ID="RptLeaveRequests" runat="server"
onitemdatabound="RptLeaveRequests_ItemDataBound"> <ItemTemplate>
<table id="tableItem" runat="server">
<tr>
<td style="width: 100px;">
<asp:Label ID="lblDate" runat="server" Text='<%#Eval("Date", "{0:dd/M/yyyy}") %>'></asp:Label>
</td>
<td style="width: 100px;">
<asp:Label ID="lblHours" runat="server" Text='<%#Eval("Hours") %>'></asp:Label>
</td>
<td style="width: 200px;">
<asp:Label ID="lblPeriod" runat="server" Text='<%#Eval("AMorPM") %>'></asp:Label>
</td>
<td style="width: 200px; font-size:10px;">
<asp:Label ID="lblNote" runat="server" Text='<%#Eval("Note") %>'></asp:Label>
</td>
<td style="50px">
<asp:RadioButtonList ID="rbtVerified" runat="server" >
<asp:ListItem Value="1">Accept</asp:ListItem>
<asp:ListItem Value="2">Reject</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:TextBox ID="txtNotes" runat="server" ></asp:TextBox>
</td>
</tr>
</table>
我正在尝试获取每个Label中的数据(例如: Convert.ToString((Label)item.FindControl(“Date”)) )但它是返回一个空字符串,我做错了什么:
foreach (RepeaterItem item in RptLeaveRequests.Items)
{
var rdbList = item.FindControl("rbtVerified") as RadioButtonList;
switch (rdbList.SelectedValue)
{
case "1":
if (new LeaveLogic().AddLeaveEmployee(Convert.ToString((Label)item.FindControl("Date")), Convert.ToDouble((Label)item.FindControl("Hours")), Convert.ToString((Label)item.FindControl("AMorPM")), "Vacational Leave", Convert.ToInt32(Context.User.Identity.Name), Convert.ToString((Label)item.FindControl("Note")))
{
Response.Redirect(Request.RawUrl);
}
break;
答案 0 :(得分:1)
我认为它没有用,因为你没有找到控件。如果找不到控件,FindControl
将返回null,如果对象值为null,Convert.ToString
将返回空字符串。
从我所看到的,您正在搜索错误的字符串ID。因此,Date
应该是lblDate
而不是.Text
。
如果您处于调试构建模式,请记住ASP.NET喜欢在运行时更改控件名称,因此“lblDate”控件可能实际上不是“lblDate”。因此,您可以尝试在浏览器上进行调试,并检查元素的ID以获取其实际ID。
此外,如果您想要标签的实际数据(请注意((Label)item.FindControl("lblDate")).Text
),您可能希望这样做:
{{1}}