<asp:HyperLink ID="Url" runat="server" Text ="<%# Eval("SiteName") %>"/>
"Text" and "Eval" are both compiled server-side and when you use quotes for both (") it gets confused as to the bounds of both, so it considers the Text attribute to be everything between the first and second quotes, so;
Text="<%#Eval("
The solution is fairly simple, use apostrophe for outer Text and quote for inner Eval so .net knows the proper boundaries
<asp:HyperLink ID="Url" runat="server" Text ='<%# Eval("SiteName") %>'/>