在HTML中嵌套引号>JavaScript>WebForms或如何在JavaScript方法中调用.NET方

Nesting quotes in HTML > JavaScript > WebForms or how to call a .NET method in a JavaScript method

本文关键字:gt JavaScript 方法 调用 NET 嵌套 HTML WebForms      更新时间:2023-09-26

谁会这么认为,但我实际上需要在ASP.NET WebForms页面中使用三级嵌套引号

这是我的:

<img 
    src='<% ResolveClientUrl("~/SwissStyleguide/img/swiss.svg"); %>'
    onerror="this.onerror=null; this.src='SwissStyleguide/img/swiss.png';" 
    alt="Confederatio Helvetica" 
/>

现在,第一部分,将动态创建的URL分配给src属性可以很好地工作。服务器解析给定的特殊URL,并创建一个绝对链接供客户端获取。

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对这个字符串的抱怨并不令人意外。我脑海中唯一的想法是使用字符串常量来避免最里面的引号,但这看起来很难看。

有没有一种方法可以转义或以其他方式指定部分或全部引号以使其起作用

注意:我知道这个问题:什么时候在JavaScript中使用双引号或单引号?但在这种情况下,更改引号没有帮助。

嗯,。。。这被证明是"<%$,<%@,<%=,<%#…怎么回事?"WebForms问题的一个例子,在这里得到了完美的回答:https://stackoverflow.com/a/957321/79485

解决方案是在百分号后使用等号,并省略后面的分号。像这样:

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") + "';";