You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Asp.Net Web Forms runat=server的HTML控件属性绑定<%#: Item %>不生效如何解决?

问题原因

普通HTML控件添加runat="server"标记后会被ASP.NET识别为服务器控件,直接写在属性值内部的<%# %>数据绑定表达式不会被引擎解析,只会作为普通字符串输出,就会出现原始代码直接渲染的问题。

解决方案

方案1:调整属性绑定写法(优先推荐,无需修改后台代码)

将整个属性的取值逻辑都放到数据绑定表达式内部,属性外层用单引号包裹避免语法冲突即可正确解析:

<a id="RepeaterElement" runat="server" href='<%# "?code=" + Item %>'><%#: Item %></a>

如果参数存在特殊字符,还可以主动加URL编码避免异常:

<a id="RepeaterElement" runat="server" href='<%# "?code=" + HttpUtility.UrlEncode(Item.ToString()) %>'><%#: Item %></a>

方案2:通过Repeater的ItemDataBound事件后台赋值

如果需要处理更复杂的属性逻辑,可以在后台绑定事件中操作控件:

  1. 先给Repeater绑定ItemDataBound事件:
<asp:Repeater ID="MyRepeater" runat="server" OnItemDataBound="MyRepeater_ItemDataBound">
    <ItemTemplate>
        <a id="RepeaterElement" runat="server"><%#: Item %></a>
    </ItemTemplate>
</asp:Repeater>
  1. 后台.cs文件添加事件处理逻辑:
protected void MyRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    // 仅处理数据行,跳过表头、表尾等行
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // 获取当前行绑定的数据源值
        string currentCode = e.Item.DataItem as string;
        // 查找当前行内的服务器端a标签
        HtmlAnchor linkCtrl = e.Item.FindControl("RepeaterElement") as HtmlAnchor;
        if (linkCtrl != null)
        {
            linkCtrl.HRef = "?code=" + currentCode;
            // 也可以在此处添加其他自定义属性
            linkCtrl.Attributes["target"] = "_blank";
        }
    }
}

内容的提问来源于stack exchange,提问作者Megrez7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:15:01