为什么 <%# Eval(...) %> 没有渲染?实际上在客户端显示“<%# Eval(...) %>”

Why is <%# Eval(...) %> not rendering? Actually shows "<%# Eval(...) %>" in the client

我在ASP.Net

中有以下控件
<asp:Button ID="btnDownload" runat="server" Text="Run" CssClass="button" OnClientClick='Download( <%# Eval("ID") %> )' />

当我 运行 页面时,以下详细信息正在输出到浏览器。

<input type="submit" name="gvMaster$ctl02$btnDownload" value="Run" onclick="DownloadReport( &lt;%# Eval(&quot;ID&quot;) %> );" id="gvMaster_btnDownload_0" class="button" />

为什么 <%# Eval("ID") %> 没有实际评估?明确地说,最初我在这个声明中有一个小的 JS 片段。我不得不做一个小的修改,所以我把它移到了一个 JS 方法中。在移动代码并仅将 ID 作为参数保留之后,此结果开始显示,之前它实际计算的是关联记录中的值。

这是怎么回事?我以前没见过这个。

尝试 OnClientClick='<%# "Download(" +Eval("ID") + " );" %>' 我怀疑您需要服务器代码来评估 javascript 中的整个表达式,因此当浏览器呈现时它将正确触发该函数。

重新发布评论作为答案:

我认为您不能像那样使用 data-binding 在服务器端控件上设置属性(混合静态文本和动态 Eval 值)。您应该为父级 repeater/datagrid/etc 使用 OnItemDataBound 事件并将其设置在后面的代码中,或者使用 OnClientClick='<%# Eval("ID", "Download({0})") %>',在其中评估整个值并立即将其发送到属性。