2010-10-06 30 views
0

j'ai un répéteur qui affiche un contrôle utilisateur personnalisé sur un formulaire plusieurs fois comme suit:ASP.NET répéteur de contrôle - Référencer éléments individuels

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

Binding ce à une source de données SQL affiche correctement les informations que je attendre:

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(); 

ce que je ne peux pas travailler est de savoir comment faire référence à un élément individuel de ce pour aller directement à l'élément spécifique que je veux, par exemple, pour lier un élément d'un autre site web. J'essaie d'utiliser la fonction "J'aime" de Facebook, et je crois donc avoir besoin d'une URL qui me conduira directement à l'élément en question. Quelqu'un peut-il me diriger dans la bonne direction, s'il vous plaît?

EDIT:

Ce que je suis à la recherche est un moyen de référencer un seul élément dans le répéteur de données à l'extérieur du site Web. Par exemple:

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

EDIT:

Changé code ci-dessus afin de tenir compte des réponses données à l'aide d'une étiquette. Essayer de référencer la page en utilisant:

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

par exemple.

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

rechargements simplement la page

EDIT:

HTML à partir du contrôle de l'utilisateur:

<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 /> 
+0

'http://www.mywebsite.com/MyPage/#Key' est pas le format correct . Comme Tom l'a souligné, vous devriez utiliser 'http://www.mywebsite.com/MyPage.aspx#Key'. Le contrôle de l'utilisateur est un hareng rouge - obtenez vos balises d'ancrage avec un simple texte dans le répéteur, puis vous pouvez remettre le contrôle de l'utilisateur. –

+0

Merci pour cela, et à Tom. J'ai édité la question comme suit: www.site/page#key ne fait que recharger la page. Je me serais attendu à ce que le navigateur se concentre sur l'élément spécifique. –

Répondre

2

Essayez ce code pour votre contrôle utilisateur (vous n'avez pas besoin de 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 /> 
+0

Merci, mais le vrai problème que j'ai ici est que http: // mysite.com/page/# La clé ne trouve pas l'étiquette correcte et semble affecter le formatage de la page maquette. –

+2

Salut, alors vous pouvez essayer ceci: c'est un bug que si vous spécifiez "display: none" alors vous ne pouvez pas utiliser l'ancre. –

2

Si vous incluez une balise d'ancrage, vous seriez en mesure de faire référence dans le URL via la marque pointue:

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> 
+0

J'ai ajouté un affichage: none et retiré l'étiquette supplémentaire de l'autre réponse (maintenant supprimée). Voyez si cela aide avec la page maître. –

+0

Cela ne semble pas fonctionner, et la mise en forme de la page maître revient à la mise en forme par défaut. –

+0

Pouvez-vous s'il vous plaît poster un exemple de ASP.NET ou rendu HTML à partir de votre UserControl? Et votre masterpage serait également utile. –