c#
  • asp.net
  • 2012-12-19 62 views 2 likes 
    2

    我有下面的代码背后:评估和演示锚的href

    protected string VcdControlPanelLink { get; set; } 
    
    protected void Page_Load(object sender, EventArgs e) { 
        VcdControlPanelLink = "http://www.mywebsite.com"; 
    } 
    

    而下面的标记:

    <a href='<%# Eval(VcdControlPanelLink) %>' target="_blank" title="View the VDC control panel">VDC control panel</a> 
    

    但是当我运行该页面时,href标记呈现为一个空字符串:

    <a title="View the VDC control panel" target="_blank" href="">VDC control panel</a> 
    

    我已经尝试过标记等各种组合,但不能让它工作。我错过了什么?

    回答

    4

    如果在模板中使用data binding expressions<%# ... %>(例如,GridView的ItemTemplate),则会自动调用数据绑定。但是,如果你使用模板以外这样的表达,你需要(在你的情况或this.DataBind())调用Control.DataBind()调用数据绑定自己:

    protected string VcdControlPanelLink { get; set; } 
    
    protected void Page_Load(object sender, EventArgs e) { 
        VcdControlPanelLink = "http://www.mywebsite.com"; 
        this.DataBind(); 
    } 
    
    <!-- Note that you do *not* use Eval here! --> 
    <a href='<%# VcdControlPanelLink %>' target="_blank" ... /> 
    

    不过,我不认为数据绑定是正确的工具。由于使用的是基本的HTML元素(而不是Web控件),你可以使用内联ASP.NET表达式(无this.DataBind()要求):

    <a href='<%= VcdControlPanelLink %>' target="_blank" ... /> 
    

    在任何情况下,请确保您的链接不包含引号',或者您正在进行一些HTML注入。如果该值由用户提供,请不要忘记HtmlEncode并对其进行消毒。

    +0

    点上!谢谢。我以为我曾尝试过,但认为我使用了<%#而不是<%= – Yetiish

    +1

    @ChrisO:很高兴能帮上忙!为了完整起见,我还添加了一个使用数据绑定'<%# ... %>'语法的示例。 – Heinzi

    1

    让你的财产公开和访问它像这样,

    public string VcdControlPanelLink { get; set; } 
    
    <a href='<%= VcdControlPanelLink %>' target="_blank" title="View the VDC control panel">VDC control panel</a> 
    
    +1

    那真的应该是'%%'吗?如果是这是什么意思 - 我以前没有遇到过... – Chris

    +0

    我的错误,谢谢克里斯。 – Adil

    相关问题