Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在使用服务器端分隔符时转义字符_Asp.net_Escaping_Server Side Scripting - Fatal编程技术网

Asp.net 如何在使用服务器端分隔符时转义字符

Asp.net 如何在使用服务器端分隔符时转义字符,asp.net,escaping,server-side-scripting,Asp.net,Escaping,Server Side Scripting,因此,目前,在asp gridview中,我有以下内容 <span id="btnEdit" runat="server" onclick="ShowEditCriteriaFilterDialog('<%#Eval("intSMCID")%>', '<%#Eval("strDescription")%>')" class="linkText">Edit</span> 编辑 我本质上是在寻找引号/双引号的语法,以便真正正确地实现这一点,因为我上

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

<span id="btnEdit" runat="server" onclick="ShowEditCriteriaFilterDialog('<%#Eval("intSMCID")%>', '<%#Eval("strDescription")%>')" class="linkText">Edit</span>
编辑
我本质上是在寻找引号/双引号的语法,以便真正正确地实现这一点,因为我上面的内容无法正常工作

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

如果我用双引号封装整个onclick,就像ASPX元素的大多数属性一样,它不会正确呈现,并且第一条语句后面的逗号后面的所有内容都会在屏幕上显示为实际文本。这使我相信需要做一些逃避,以防止它认为单击句柄在该语句的中间部分结束。


请注意,如果我去掉runat=“server”并将其封装在双引号中,似乎效果会更好……但我需要将span作为服务器端控件,用于页面代码中的许多其他功能,我需要通过FindControl访问控件,我认为解决方案是

onclick='<%# "ShowEditCriteriaFilterDialog(" +Eval("intSMCID") + ","+ Eval("strDescription") +" );" %>'
onclick=''

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

对于带有
runat=“server”
的控件,不能在单个属性值中混合静态内容和
块,因此需要在单个
块中构建整个字符串

块中的字符串中,可以使用
&apos插入单个报价:
编辑仅在.NET 4.0中工作的;在2.0中,它生成
&;载脂蛋白,这将不起作用。请改用双引号:

onclick='<%# string.Format(
   "ShowEditCriteriaFilterDialog(\"{0}\", \"{1}\")", 
   Eval("intSMCID"), Eval("strDescription")) %>'
onclick=''
根据您的数据,您可能还需要为JavaScript编码字符串值:

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

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

使用此解决方案,如果我单击“编辑”链接,则不会发生任何事情,尽管它确实在屏幕上正确呈现。我将添加这一点,当我在与此链接对应的代码行上查看源代码时,似乎评估正在正确进行,因为这是视图源显示的:编辑,这似乎是我想要的,但是…单击链接似乎根本不会导致浏览器执行任何操作。我似乎不知道如何格式化代码的注释:(@ScottFortier:您可能会在控制台中看到一个脚本错误,因为描述中没有引号。这是真的……我确实看到与gridview中的一行对应的每一行代码都有一个脚本错误,该行对应于您认为的.net.I旧版本中的JavaScriptStringEncode的替代品相信那是.NET 4或4.5。这个项目是.NET 2.0(我无法控制)@Scottforter:这里有一个.NET 2.0的示例:(它只缺少一个
,应该跟在其他案例后面。)好的,答案中的第一个选项/解决方案正确编译/运行/显示,但与另一个答案一样,单击时实际上不执行任何操作,并向浏览器提供脚本错误。这是view source中标记的外观:Edit@ScottFortier:看起来
&apos;
技巧在.NET 2.0中不起作用;您需要使用改为双引号。我会更新我的答案。哦,我的天啊,它很有效,谢谢你!!我已经摆弄这个东西两天了,我很高兴它终于被处理好了,我希望我能做更多的事来感谢你,而不仅仅是点击绿色的复选标记来认出你