ASP.NET转发器控件 - 引用单个元素

时间:2010-10-06 11:52:55

标签: asp.net facebook user-controls asp.net-2.0 repeater

我有一个转发器,可以多次在表单上显示自定义用户控件,如下所示:

<asp:Repeater runat="server" ID="MyRepeater" 
    ondatabinding="MyRepeater_DataBinding" >
    <ItemTemplate>
        <a name='<%# Eval("[\"Key\"]") %>' style="display: none;"></a>            

        <uc1:MyControl ID="Control1" runat="server" 
            Info='<%#Eval("[\"Info\"]") %>' Date='<%#Eval("[\"Date\"]") %>' 
             Key='<%#Eval("[\"Key\"]") %>' />/>
    </ItemTemplate>
</asp:Repeater>

将此绑定到SQL数据源会正确显示我期望的信息:

    SqlDataSource.SelectCommand =
                "SELECT Info, Date, Key " +
                "FROM [dbo].[Test] ";
    SqlDataSource.SelectCommandType = SqlDataSourceCommandType.Text;
    DataView resultsdv = (DataView)SqlDataSource.Select(DataSourceSelectArguments.Empty);

    MyRepeater.DataSource = resultsdv.Table.Rows;
    MyRepeater.DataBind();

我无法解决的是如何引用其中的单个元素直接转到我想要的特定项目,例如,链接来自其他网站的项目。我正在尝试使用Facebook“赞”功能,所以我相信我需要一个能直接带到相关项目的网址。有人能指出我正确的方向吗?

编辑:

我正在寻找的是一种从网站外部引用数据中继器中的单个项目的方法。例如:

http://www.mywebsite.com/MyPage/InfoItem3

编辑:

更改上面的代码以反映使用标记给出的答案。尝试使用以下方式引用该页面:

http://www.mywebsite.com/MyPage#Key

e.g。

http://www.mywebsite.com/MyPage#10

只需重新加载页面

编辑:

来自用户控件的

HTML:

<script type="text/javascript" >
$(function() {
    var iframe = $("#likeButton");
    var newSrc = iframe.attr("src");
    newSrc += encodeURIComponent(location.href) + "<%= lblKey.Text %>";

    iframe.attr("src", newSrc);

});
</script>

<asp:Label runat="server" ForeColor="blue" Text="Date" Font-Bold="true" Font-Size="Smaller" ID="lblDate" Width="100%" />
<br />
<asp:Label runat="server" Text="Info" ID="lblInfo" Font-Size="Smaller" />
<br />
<asp:Label runat="server" Text="Key" ID="lblKey" Font-Size="Smaller" Visible="true" />
<br />
<iframe id="likeButton"
    src="http://www.facebook.com/plugins/like.php?href=" 
    scrolling="no" 
    frameborder="0"         
    style="border:none; overflow:hidden; 
    width:450px; height:80px;">
</iframe>
<br />

2 个答案:

答案 0 :(得分:2)

如果您包含锚标记,则可以通过清晰标记在URL中引用它:

http://www.site.com/page.aspx#Info

<asp:Repeater runat="server" ID="MyRepeater">
    <ItemTemplate>
        <a name='<%# Eval("Info") %>' style="display: none;"></a>
        <uc1:MyControl ID="Control1" runat="server" 
                 Date='<%# Eval("Date") %>' 
                 Info='<%# Eval("Info") %>' />
    </ItemTemplate>
</asp:Repeater>

答案 1 :(得分:2)

尝试使用此代码进行用户控制(您不需要Javascript):

<asp:Label runat="server" ForeColor="blue" Text="Date" Font-Bold="true" Font-    Size="Smaller" ID="lblDate" Width="100%" /> 
<br /> 
<asp:Label runat="server" Text="Info" ID="lblInfo" Font-Size="Smaller" /> 
<br /> 
<asp:Label runat="server" Text="Key" ID="lblKey" Font-Size="Smaller" Visible="true" /> 
<br /> 
<iframe id="likeButton" 
    src="http://www.facebook.com/plugins/like.php?href=<%# lblKey.Text %>"  
    scrolling="no"  
    frameborder="0"          
    style="border:none; overflow:hidden;  
    width:450px; height:80px;"> 
</iframe> 
<br />