数据绑定不起作用

hsz*_*hsz 0 c# asp.net

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"%>不起作用?

怎么调试呢?

m0s*_*0sa 6

您不能将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)