0

ASP.Net ページに 1 つのリピーター コントロールがあります。1 つのチェック ボックス、ラベル、ファイル アップロード コントロール、および 3 つの隠しフィールドがあります。非表示フィールドの 1 つの値に基づいて、ファイル アップロード コントロールを非表示/表示したいと考えています。

リピーターの ItemDataBound イベントのコード スニペットを次に示します。

protected void rptChecks_ItemDataBound (object sender, RepeaterItemEventArgs e)
{ 
    HiddenField hdID = (HiddenField)e.Item.FindControl("hdnCheckID");
    HiddenField hdDocOpt = (HiddenField)e.Item.FindControl("hdnDocOption");
    FileUpload fileCheck = (FileUpload)e.Item.FindControl("fileDocument");

    if ( Convert.ToInt32(hdDocOpt.Value) == 0 || Convert.ToInt32(hdDocOpt.Value) == 1)
            fileCheck.Visible = true;
        else
            fileCheck.Visible = false;
}

ここにマークアップコードがあります

<asp:Repeater ID="rptChecks" runat="server" 
                onitemdatabound="rptChecks_ItemDataBound">
                <HeaderTemplate>
                    <table>
                        <tr>
                            <th>
                                &nbsp;
                            </th>
                            <th>
                                &nbsp;
                            </th>
                            <th>
                                &nbsp;
                            </th>
                        </tr>
                </HeaderTemplate>
                <ItemTemplate>
                    <tr>
                        <td>
                            <asp:CheckBox ID="chk" runat="server" />
                        </td>
                        <td style="padding-left: 10px">
                            <asp:Label ID="lblCheck" runat="server" Text="<%#Bind('Name') %>"></asp:Label>
                        </td>
                        <td style="padding-left: 10px">
                            <asp:HiddenField ID="hdnDocOption" runat="server" Value="<%#Bind('DocumentOption') %>" />
                            <asp:HiddenField ID="hdnCheckID" runat="server" Value="<%#Bind('ID') %>" />
                            <asp:FileUpload ID="fileDocument" runat="server" />
                        </td>
                    </tr>
                </ItemTemplate>
                <FooterTemplate>
                    </table>
                </FooterTemplate>
            </asp:Repeater>

これどうやってするの?

エラー:オブジェクト参照が if-condition でオブジェクトのインスタンスに設定されていないため、エラーが発生しました

4

1 に答える 1

0

エラーは、HeaderTemplate でコントロールを見つけて値を使用しようとすると発生します。この場合、値は常に null です。以下のように、ItemTemplate でコントロールを見つける必要があります。

protected void rptChecks_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        HiddenField hdID = (HiddenField)e.Item.FindControl("hdnCheckID");

        HiddenField hdDocOpt = (HiddenField)e.Item.FindControl("hdnDocOption");

        FileUpload fileCheck = (FileUpload)e.Item.FindControl("fileDocument");

        if (Convert.ToInt32(hdDocOpt.Value) == 0 || Convert.ToInt32(hdDocOpt.Value) == 1)
            fileCheck.Visible = true;
        else
            fileCheck.Visible = false;
    }
}
于 2013-08-08T13:32:06.977 に答える