在MainPage.aspx
我有
<asp:HyperLink runat="server" NavigateUrl='<%#"http://google.pl"%>'>test</asp:HyperLink>
它不会添加href
标记,只会输出<a>test</a>
。
当我这样做时:
<asp:HyperLink runat="server" NavigateUrl='http://google.pl'>test</asp:HyperLink>
工作正常。
为什么<%#"http://google.pl"%>
不起作用?
如何调试?
答案 0 :(得分:6)
您无法将HTML文字输出到asp控件属性中。您可以在codebehind中设置超链接NavigateUrl属性,也可以将html锚点输出为文字。
输出为文字(在这种情况下,您的代码隐藏类必须公开名为UrlParams的受保护或公共属性或字段)
// site.aspx
<a href="<%="http://google.pl" + UrlParams.Google%>">test</a>
在codebehind中设置:
// site.aspx
<asp:HyperLink runat="server" ID="link1">test</asp:HyperLink>
// site.aspx.cs or <script runat="server">..</script>
protected void Page_Load(..) {
link1.NavigateUrl = "http://google.pl" + UrlParams.Google;
}
你原来问题的答案。 <#
是data-binding expression,它在服务器控件属性和数据源之间创建绑定。
编辑:事实证明,您实际上也可以将<#
语法用于字符串。它工作的关键是调用Control.DataBind()方法。您可以在HyperLink控件上调用它,甚至可以在当前页面上调用它,因为Page继承自Control。
示例:(将其放在空的aspx页面中 - 不需要数据源):
<asp:HyperLink ID="link1" runat="server" NavigateUrl='<%# "#Test" %>'>Test</asp:HyperLink>
<script runat="server" type="text/C#">
protected override void OnLoad(EventArgs e)
{
DataBind();
// or:
// link1.DataBind();
base.OnLoad(e);
}
</script>
答案 1 :(得分:3)
对不起,但这确实有效:
<asp:ListView ID="lvTest" runat="server">
<ItemTemplate>
<asp:HyperLink ID="test" NavigateUrl='<%#"http://google.pl"%>' runat="server">test</asp:HyperLink>
</ItemTemplate>
protected void Page_Load(object sender, EventArgs e)
{
lvTest.DataSource = Enumerable.Range(0, 5);
lvTest.DataBind();
}
如果你想将数据源与文字混合,你可以这样做:
<asp:HyperLink ID="test" NavigateUrl='<%#"http://google.pl?page=" + Container.DataItem %>' runat="server">test</asp:HyperLink>
如果要访问特定属性,则应使用Eval而不是Container.DataItem。 BTW这一切都是不好的做法。您应该使用ItemDataBound(或类似事件)并使用强类型C#代码进行绑定。
答案 2 :(得分:3)
您可以使用以下内容:
页面的Html部分:
<asp:HyperLink ID="test" NavigateUrl="<%# GetUrl() %>" runat="server">test</asp:HyperLink>
代码背后:
protected string GetUrl()
{
//Put your logic here to generate dynamicly url that you want
}
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
希望它会对你有所帮助。
最好的问候,迪马。
答案 3 :(得分:0)
这是一个黑暗中的刺,但<%#
和%>
标记表示您想要运行数据绑定代码(例如,您从数据库返回的内容)。
您不需要这些输出字符串文字,但如果您这样做,相应的标记将是<%=
,而不是<%#
。