5

所以,目前,在 asp gridview 中,我有以下内容

<span id="btnEdit" runat="server" onclick="ShowEditCriteriaFilterDialog('<%#Eval("intSMCID")%>', '<%#Eval("strDescription")%>')" class="linkText">Edit</span>

我本质上正在寻找的是引号/双引号的语法来真正正确地完成这个,因为我上面的内容不能正常工作。

首先,如果我用单引号封装整个 onclick,而不是在里面放任何其他引号,它可以用于渲染目的,但是当我在运行时实际单击链接时,什么也没有发生。

如果我用双引号封装整个 onclick,就像 ASPX 元素的大多数属性一样,它不会正确呈现,并且第一个 <%#Eval %> 语句之后的逗号之后的所有内容都会显示为实际文本屏幕。这使我相信需要进行一些转义,以防止它认为单击处理程序在该 <%#Eval %> 语句的中间某处结束。

请注意,如果我删除 runat="server" 并将其封装在双引号中,这似乎效果更好......但我需要跨度成为页面中许多其他功能的服务器端控件我需要通过 FindControl 访问控件的代码后面

4

2 回答 2

0

Eval函数需要双引号,因此您必须将属性值用单引号括起来。

您不能将静态内容和<%# ... %>块混合在带有 的控件的单个属性值中runat="server",因此您需要在单个<%# ... %>块中构建整个字符串。

<%# ... %>块中的字符串中,您可以使用&apos;插入单引号:
EDIT仅适用于 .NET 4.0;在 2.0 中,它&amp;apos;会生成 ,这是行不通的。改用双引号:

onclick='<%# string.Format(
   "ShowEditCriteriaFilterDialog(\"{0}\", \"{1}\")", 
   Eval("intSMCID"), Eval("strDescription")) %>'

根据您的数据,您可能还需要对 JavaScript 的字符串值进行编码:

onclick='<%# string.Format(
   "ShowEditCriteriaFilterDialog(\"{0}\", \"{1}\")", 
   Eval("intSMCID"), 
   HttpUtility.JavaScriptStringEncode(Eval("strDescription", "{0}"))) %>'

(为了可读性而包装的代码 - 它需要在一行上。)

于 2012-12-13T16:37:58.210 回答
0

我认为解决方案是

onclick='<%# "ShowEditCriteriaFilterDialog(" +Eval("intSMCID") + ","+ Eval("strDescription") +" );" %>'
于 2012-12-13T16:34:21.910 回答