Eval in anchor href

时间:2012-12-19 09:27:37

标签: c# asp.net

我有以下代码:

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>

我尝试了各种标记组合,但无法使其正常工作。我错过了什么?

2 个答案:

答案 0 :(得分:4)

如果您在模板中使用data binding expressions <%# ... %>(例如GridView的ItemTemplate),则会自动调用数据绑定。但是,如果您在模板之外使用此类表达式,则需要通过调用Control.DataBind()(或您的this.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并清理它。

答案 1 :(得分:1)

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

public string VcdControlPanelLink { get; set; }

<a href='<%= VcdControlPanelLink %>' target="_blank" title="View the VDC control panel">VDC control panel</a>
相关问题