我有以下代码:
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>
我尝试了各种标记组合,但无法使其正常工作。我错过了什么?
答案 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>