Asp.net 为什么<;%#评估(…)%>;不渲染?实际上显示了<;%#评估(…)%>&引用;在客户机中

Asp.net 为什么<;%#评估(…)%>;不渲染?实际上显示了<;%#评估(…)%>&引用;在客户机中,asp.net,eval,Asp.net,Eval,我在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" oncli

我在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" />

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


会发生什么事?我以前从未见过这种情况。

请尝试
OnClientClick='
我怀疑您需要服务器代码来计算javascript中的整个表达式,因此当浏览器呈现时,它将正确触发函数。

重新发布注释作为答案:


我不认为可以使用这样的数据绑定(混合静态文本和动态Eval值)在服务器端控件上设置属性。您应该为父repeater/datagrid/etc使用
OnItemDataBound
事件,并将其设置在代码隐藏中,或者使用
OnClientClick=''
,其中所有值都会立即计算并发送到属性。

自从我处理WebForms以来,已经有一段时间了,所以我不是100%肯定,但我不认为可以使用这样的数据绑定在服务器端控件上设置属性。您应该为父中继器/datagrid/etc使用
OnItemDataBound
事件,并在代码隐藏中设置它。异常可能是这样的:
OnClientClick='
,其中整个值一次计算并发送到属性。我将尝试一下,但奇怪的是,在我更改
OnClientClick
结果的内容并剥离JS之前,评估一直在工作。另外,我做了一个测试,将
语句移到了control属性之外,并在元素之前输出它。成功了!?!?Bizarre@Sam这就解决了!非常感谢。请随时发布关于接受的答案。