2

我有以下代码:

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

2 回答 2

4

如果您在模板中使用数据绑定表达式 (例如GridView 的),则会自动调用数据绑定。但是,如果您在模板之外使用此类表达式,则需要通过调用(或在您的情况下)自己调用数据绑定:<%# ... %>ItemTemplateControl.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并对其进行清理。

于 2012-12-19T09:30:15.023 回答
1

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

public string VcdControlPanelLink { get; set; }

<a href='<%= VcdControlPanelLink %>' target="_blank" title="View the VDC control panel">VDC control panel</a>
于 2012-12-19T09:31:48.557 回答