2

次のリピーターがあります。

<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> 

各ラベルのデータを取得しようとしています (例: 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;
4

1 に答える 1

1

コントロールが見つからないため、機能していないと思います。FindControlコントロールが見つからない場合は nullConvert.ToStringを返し、オブジェクトの値が null の場合は空の文字列を返します。

私が見る限り、間違った文字列 ID を検索しています。代わりにDate、それはする必要がありますlblDate

デバッグ ビルド モードを使用している場合、ASP.NET は実行時にコントロール名を変更するのが大好きなので、"lblDate" コントロールが実際には "lblDate" ではない可能性があることに注意してください。そのため、ブラウザでデバッグを試みて、要素の ID を調べて実際の ID を調べることができます。

また、ラベルの実際のデータが必要な場合は、代わりにこれを実行することをお勧めします ( に注意して.Textください)。

((Label)item.FindControl("lblDate")).Text
于 2013-08-07T14:34:22.970 に答える