3

概要:リピーター コントロールの最初の CheckBox のテキストをクリックすると、最後のチェック ボックスがクリックされます。なぜこれが起こっているのか知っています。labelタグと要素 IDの関連付け。chkMarkedForDeletionそのラベルをクリックすると、すべての CheckBox が同じ ID を持っているため、最後の CheckBox が選択されます。これを回避する方法があるかどうか疑問に思っていますか?簡単な方法は、個々のラベルを作成し、各 CheckBox に正しく関連付けることですが、これは CheckBox の想定される既定の動作を無効にします。

リピーターコード:

<asp:Repeater ID="childNodesDataRepeater" runat="server">
    <ItemTemplate>
        <table style="width: 100%;" cellpadding="0" cellspacing="0" border="0">
            <tr>
                <td style="width: 200px;">
                    <asp:CheckBox ID="chkMarkedForDeletion" runat="server" EnableViewState="true" Text="Remove"
                        Checked='<%# DataBinder.Eval(Container.DataItem, "IsMarkedForDeletion") %>' />
                </td>
                <td>
                    &nbsp;
                </td>
                <td style="width: 200px;">
                    <asp:CheckBox ID="chkHighImpactCause" runat="server" EnableViewState="true" Text="High Impact Cause"
                        Checked='<%# DataBinder.Eval(Container.DataItem, "IsHighPriority") %>' />
                </td>
            </tr>
            <tr>
                <td colspan="3">
                    <asp:Label ID="header002" runat="server" Text="What caused this problem?" />
                </td>
            </tr>
            <tr>
                <td colspan="3">
                    <asp:TextBox ID="txtProblemCausedBy" runat="server" EnableViewState="true" Width="100%"
                        Text='<%# DataBinder.Eval(Container.DataItem, "Description") %>' /><br />
                </td>
            </tr>
            <tr>
                <td colspan="3" style="height: 5px;">
                    <hr />
                    <asp:HiddenField ID="nodeIdentifier" runat="server" EnableViewState="true" Value='<%# DataBinder.Eval(Container.DataItem, "AnalysisID") %>' />
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>

CheckBox 用に生成された HTML コード:

<INPUT id=chkMarkedForDeletion type=checkbox name=TabContainer$tabProblemResolution$frmProblemResolution1$childNodesDataRepeater$ctl00$chkMarkedForDeletion>
<LABEL for=chkMarkedForDeletion>Remove</LABEL>
...
...
<INPUT id=chkMarkedForDeletion type=checkbox name=TabContainer$tabProblemResolution$frmProblemResolution1$childNodesDataRepeater$ctl02$chkMarkedForDeletion>
<LABEL for=chkMarkedForDeletion>Remove</LABEL>

問題: リピーターの問題のスクリーンショット

ありがとう、アビ

4

1 に答える 1

3

リピーターのClientIDModeが「Static」に設定されていないことを確認してください。

この設定は、親から継承可能であり、web.config まで続きます。したがって、リピーターで ClientIDMode を明示的に設定する必要がある場合は、一部の親がデフォルト (予測可能) を「静的」にオーバーライドすることを意味します。

于 2013-01-23T19:18:54.563 に答える