String.Format HTML

3

string.format在下面的html中创建了一个非常奇怪的结果。我相信这与内联if块有关,但我还没有弄清楚。请帮忙!

String.Format(@"<input type='text' 
                       name='PostalCode' 
                       id='PostalCode' 
                       onfocus='if(this.value == '{0}') 
                                {{ this.value = ''; }}' 
                       value='{1}' 
                       class='enter-postal' />", 
              "Enter Postal Code", "Enter Postal Code")

3
“odd”是什么意思?它会准确地生成你要求它生成的内容。 - MarcinJuraszek
1
它在做什么,你想让它做什么? - C4F
你在 JavaScript 代码中使用了 ',即使它被用作分隔符:请使用 "(并转义它)。此外,我建议编写一个帮助类来构建带属性的 HTML 标签... - Adriano Repetti
你可以通过不使用字符串字面量来定义HTML来避免整个问题。通常有更好的方法来解决这个问题,比如使用某种形式的标记文件或模板。如果你能够在一个合适的HTML编辑器中编写HTML,那么像这样的错误就会变得明显,而且你也不需要处理多层字符转义的问题。 - Servy
说实话,我不太确定他想要实现什么,但是我认为我们不应该使用“==”来比较字符串,这样做有问题吗? - C4F
显示剩余2条评论
3个回答

3

我没有发现任何奇怪的情况,所以如果不知道你期望的结果,我不确定问题出在哪里。

我注意到onfocus='if(this.value == '{0}') {{ this.value = ''; }}'中有单引号,并且JS也是如此,这样是无法工作的。请尝试:

String.Format(@"<input type='text' name='PostalCode' id='PostalCode' onfocus=""if(this.value == '{0}') {{ this.value = ''; }}"" value='{1}' class='enter-postal' />",
"Enter Postal Code", "Enter Postal Code")

使用变量而不是字面值时,您还需要执行.Replace("'", "\\'"),以避免由于数据中的撇号而导致类似问题。


2
尝试这个:

在这里试试:

String.Format(@"<input type='text' name='PostalCode' id='PostalCode' onfocus='if(this.value == ""{0}"") {{ this.value = """"; }}' value='{1}' class='enter-postal' />", "Enter Postal Code", "Enter Postal Code")

3
严格来说,需要使用不同的转义字符;为了转义双引号",需要使用两个双引号"" - Jon Hanna

1
在你的onFocus属性中,使用转义双引号。
String.Format(@"<input type='text' 
                       name='PostalCode' 
                       id='PostalCode' 
                       onfocus=\"if(this.value == '{0}') 
                            {{ this.value = ''; }}\" value='{1}' 
                       class='enter-postal' />", 
              "Enter Postal Code", "Enter Postal Code")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接