在MainPage.aspx我有
<asp:HyperLink runat="server" NavigateUrl='<%#"http://google.pl"%>'>test</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
它不会添加href标签,只会添加输出<a>test</a>.当我做:
<asp:HyperLink runat="server" NavigateUrl='http://google.pl'>test</asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
它工作正常.
为什么<%#"http://google.pl"%>不起作用?
怎么调试呢?
您不能将HTML文字输出到asp控件属性中.您可以在codebehind中设置超链接NavigateUrl属性,也可以将html锚点输出为文字.
输出为文字(在这种情况下,您的代码隐藏类必须公开名为UrlParams的受保护或公共属性或字段)
// site.aspx
<a href="<%="http://google.pl" + UrlParams.Google%>">test</a>
Run Code Online (Sandbox Code Playgroud)
在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;
}
Run Code Online (Sandbox Code Playgroud)
以及原始问题的答案.它<#是一个数据绑定表达式,它在服务器控件属性和数据源之间创建绑定.
编辑:事实证明,你实际上也可以使用<#字符串语法.它工作的关键是调用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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |