使转发器行可检查

时间:2013-10-21 06:56:03

标签: c# repeater

我有一个ASP.NET转发器包含图像和标签(在div中包装)。 我想让转发器行像复选框一样工作。

<asp:Repeater ID="rpt" runat="server">
   <ItemTemplate>
       <div class="divItem">                                                              
           <asp:HiddenField ID="hfIID" runat="server" Value='<%# Eval("ID") %>' />
           <asp:Image ID="imgItem" runat="server" ImageUrl='<%# Eval("ImageURL") %>' />
           <asp:Label ID="lblName" runat="server" Text='<%# Eval("ItemName") %>'></asp:Label>
       </div>
   </ItemTemplate>
</asp:Repeater>

例如,转发器有10个项目。

当用户选择项目3和项目5(类似于复选框)并按保存时,我需要获取所选的项目ID。

1 个答案:

答案 0 :(得分:0)

您需要使用jquery添加一些客户端脚本。

以下是如何操作:

在你的.aspx定义转发器中:

<asp:Repeater ID="rpt" runat="server">
    <ItemTemplate>
        <div class="divItem" id='divItem<%# Eval("ID") %>'>
            <asp:HiddenField ID="hfSelected" runat="server" />
            <asp:HiddenField ID="hfIID" runat="server" Value='<%# Eval("ID") %>' />
            <asp:Image ID="imgItem" runat="server" ImageUrl='<%# Eval("ImageURL") %>' />
            <asp:Label ID="lblName" runat="server" Text='<%# Eval("ItemName") %>'></asp:Label>
        </div>
    </ItemTemplate>
</asp:Repeater>

然后添加此javascript:

<script>
    $(function () {

        $('.divItem').click(function () {

            var item = $(this);

            item.toggleClass("divItemSelected"); //mark div as selected: set background color, etc...

            var selector = "#" + item.attr("id") + " input[type='hidden'][id*='hfSelected']";

            var selected = $(selector).val();

            if (selected == "true") {
                $(selector).val("false");
            } else {
                $(selector).val("true");
            }

        });

    });
</script>

然后在按钮点击后面的代码隐藏中,你这样做:

protected void OnSaveClick(object sender, EventArgs e)
{
    foreach (RepeaterItem item in rpt.Items)
    {
        HiddenField hfSelected = item.FindControl("hfSelected") as HiddenField;

        bool selected = false;

        bool.TryParse(hfSelected.Value, out selected);

        if (selected)
        {
            HiddenField hfIID = e.Item.FindControl("hfIID") as HiddenField;

            int id = Convert.ToInt32(hfIID.Value);
            // do appropriate action as needed.
        }

    }
}

希望这有帮助!

此致 乌罗什