1

我有一个由图像和标签组成的 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。

4

1 回答 1

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

    }
}

希望这可以帮助!

问候,乌罗斯

于 2013-11-02T16:54:19.650 回答