如何为Repeater生成的项目提供唯一的元素ID?

时间:2014-07-10 12:57:52

标签: c# asp.net

我在ASP.Net中使用Repeater。我正在访问数据库中的内容。每个id或类的html元素都是相同的。这是一个多重的新标题。有阅读按钮。

我想在新页面中打开一个新页面,其中包含该标题的完整描述 我在分配唯一ID时遇到问题,我从中知道单击了哪个标题。

这是该部分的代码:

<div class="content">
        <table>
            <tr>
                <td class="contl">
                    <div>
                        <asp:Repeater ID="RepCountry" runat="server"    OnItemCommand="RepCountry_ItemCommand">
                            <ItemTemplate>
                                <div class="contentbox">
                                    <div class="postheading">
                                        <%#Eval("title")%>
                                    </div>

                                    <table>
                                    <tr><td> <div class="postimage">
                                        <img src="Admin/images/<%# Eval("img")%>" alt="" height="50%" width="100%" />
                                    </div></td>
                                    <td><div class="discp">
                                        <div class="dpost">
                                            <p style="font-family: Times New Roman">
                                                <%#Eval("p_date")%></p>
                                        </div>
                                        <div class="discp_c">
                                            <p>
                                                <%# Eval("descr").ToString().Substring(0,200).ToString()%></p>
                                            <p style="color: Maroon">
                                                <a id="A1"+ href="Readmore.aspx?oid=" runat="server" onclick="changeid(this.id)">Read More.</a></p>
                                        </div>
                                        <div class="social">
                                            <a href="">
                                                <img src="images/t.png" alt="twtter" /></a> <a href="">
                                                    <img src="images/f.png" alt="facebook" /></a> <a href="">
                                                        <img src="images/g.png" alt="gmail" /></a> <a href="">
                                                            <img src="images/in.png" alt="linkedin" /></a>
                                        </div>
                                    </div></td></tr>
                                    </table>


                                </div>
                            </ItemTemplate>
                        </asp:Repeater>

1 个答案:

答案 0 :(得分:1)

我发现您已使用Eval在商品中插入说明:

<div class="discp_c">
    <p>
        <%# Eval("descr").ToString().Substring(0,200).ToString()%></p>
    <p style="color: Maroon">
...                                    

如果我很好地阅读了代码,那么您至少阅读title, descr, img数据库查询?

如果是,请确保查询还返回文章的ID(主键),并使用Eval在链接中插入该ID。因此,如果数据库中文章的主键以例如articleID命名,则从

更改数据库查询
SELECT xxx as title, yyy as descr, zzz as img ....

SELECT id as articleID, xxx as title, yyy as descr, zzz as img ....

然后,您可以使用数据库提供的ID来创建文章的完整链接:

<a runat='server' ....
   href='Readmore.aspx?oid=<%# Eval("articleID").ToString()%>'
   ....>
   ...</a>

因此Readmore.aspx页面将准确知道应该打开哪个文章。它将直接作为oid查询参数,无需额外的工作。

如果您确实需要它,可以使用相同的技巧生成该标记的HTML ID:

<a runat='server' ....
   id='ID_<%# Eval("articleID").ToString()%>'
   href='Readmore.aspx?oid=........'
   ....>
   ...</a>

并且使用它,<a>标记将具有ID_32131, ID_4532455, ID_1231455之类的ID,只要数据库查询返回唯一的文章,ID就是唯一的。