在 HTML > JavaScript > WebForms 中嵌套引号或如何在 JavaScript 方法中调用 .NET 方法
Nesting quotes in HTML > JavaScript > WebForms or how to call a .NET method in a JavaScript method
谁会这么想,但是 我实际上需要在 ASP.NET WebForms 页面中使用 3 层嵌套引号。
这是我拥有的:
<img
src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>'
onerror="this.onerror=null; this.src='SwissStyleguide/img/swiss.png';"
alt="Confederatio Helvetica"
/>
现在,第一部分,将动态创建的 URL 分配给 src
属性可以正常工作。服务器解析给定的特殊 URL 并创建一个绝对 link 供客户端获取。
但是 onerror
处理程序更棘手:因为 png 图像的 src
URL 已经在带双引号的表达式中,我无法调用 ASP.NET ResolveClientUrl
方法,严格要求字符串参数使用双引号。
我试过这样做(不起作用!)
<img
src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>'
onerror="this.onerror=null; this.src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.png"); %>';"
alt="Confederatio Helvetica"
/>
但不足为奇的是,Visual Studio 抱怨这个字符串。我想到的唯一想法是使用字符串常量来避免最里面的引号,但这看起来很丑陋。
是否有办法转义或以其他方式指定部分或全部引号以使其有效?
注意:我知道这个问题:When to use double or single quotes in JavaScript? 但在这种情况下更改引号没有帮助。
好吧,...结果是 "<%$, <%@, <%=, <%# ...... 怎么回事?" WebForms 问题,在这里得到了完美的回答:
解决办法是在百分号后使用等号,省略尾随分号。像这样:
onerror="this.onerror=null; this.src='<%= ResolveClientUrl("~/SwissStyleguide/img/swiss.png") %>';"
我会把问题和这个答案留在这里,以提醒任何人也被这个绊倒。
如何改为放置代码隐藏的属性?
.aspx
<img id="image" runat="server" alt="Confederatio Helvetica" />
.aspx.cs (Page_Load)
image.Attributes.Add("src", Page.ResolveUrl("~/SwissStyleguide/img/swiss.svg"));
image.Attributes.Add("onerror", "this.onerror=null; this.src='" +
Page.ResolveUrl("~/SwissStyleguide/img/swiss.png") + "';";
谁会这么想,但是 我实际上需要在 ASP.NET WebForms 页面中使用 3 层嵌套引号。
这是我拥有的:
<img
src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>'
onerror="this.onerror=null; this.src='SwissStyleguide/img/swiss.png';"
alt="Confederatio Helvetica"
/>
现在,第一部分,将动态创建的 URL 分配给 src
属性可以正常工作。服务器解析给定的特殊 URL 并创建一个绝对 link 供客户端获取。
但是 onerror
处理程序更棘手:因为 png 图像的 src
URL 已经在带双引号的表达式中,我无法调用 ASP.NET ResolveClientUrl
方法,严格要求字符串参数使用双引号。
我试过这样做(不起作用!)
<img
src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>'
onerror="this.onerror=null; this.src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.png"); %>';"
alt="Confederatio Helvetica"
/>
但不足为奇的是,Visual Studio 抱怨这个字符串。我想到的唯一想法是使用字符串常量来避免最里面的引号,但这看起来很丑陋。
是否有办法转义或以其他方式指定部分或全部引号以使其有效?
注意:我知道这个问题:When to use double or single quotes in JavaScript? 但在这种情况下更改引号没有帮助。
好吧,...结果是 "<%$, <%@, <%=, <%# ...... 怎么回事?" WebForms 问题,在这里得到了完美的回答:
解决办法是在百分号后使用等号,省略尾随分号。像这样:
onerror="this.onerror=null; this.src='<%= ResolveClientUrl("~/SwissStyleguide/img/swiss.png") %>';"
我会把问题和这个答案留在这里,以提醒任何人也被这个绊倒。
如何改为放置代码隐藏的属性?
.aspx
<img id="image" runat="server" alt="Confederatio Helvetica" />
.aspx.cs (Page_Load)
image.Attributes.Add("src", Page.ResolveUrl("~/SwissStyleguide/img/swiss.svg"));
image.Attributes.Add("onerror", "this.onerror=null; this.src='" +
Page.ResolveUrl("~/SwissStyleguide/img/swiss.png") + "';";