我认为C#中的逐字(多行)字符串是一个非常好的主意。我曾经将SQL从/到代码复制到最小化拼写错误。 实际上我需要渲染一些javascript,然后我就碰壁了。
在javascript中使用撇号可以部分避免使用双引号,但是如果你需要格式字符串,你还必须转义大括号:
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, @"
<script type=""text/javascript"">
$(document).ready(function() {
$('#my_button').click(function() {
alert('Handler for .click() called.');
});
});
</script>
");
与string.Format
相似Page.ClientScript.RegisterClientScriptBlock(this.GetType(), this.GetType().FullName, string.Format(@"
<script type=""text/javascript"">
$(document).ready(function() {{
$('#{0}').click(function() {{
alert('Handler for .click() called.');
}});
}});
</script>
"), buttonName);
我不想牺牲格式化执行的速度,只是为了在使用某种格式化字符串预处理进行编码时更容易生活。 我希望有一些聪明而简单的方法。只是不想重新发明轮子......
由于
答案 0 :(得分:2)
我希望有一些聪明而简单的方法。
不,这种非常缓慢而笨拙的方式:
EscapeCurlies(String Input)
{
String Temp = Input.Replace("{", "{{");
Temp = Temp.Replace("}", "}}");
Temp = Regex.Replace(Temp, @"{{(\d+)}}", "{$1}");
return Temp;
}
protected void Button1_Click(object sender, EventArgs e)
{
String buttonName = "bob";
String FormatString =
@"<script type=""text/javascript"">
$(document).ready(function() {
$('#{0}').click(function() {
alert('Handler for .click() called.');
});
});
</script>";
String Test = string.Format(EscapeCurlies(FormatString), buttonName);
}
`
答案 1 :(得分:0)
实际上,我刚才对此进行了一些分析,事实是:你根本不会注意到这一点。即使在数百万次迭代中的紧密循环中,差异也很小。
有关信息虽然你可能想看一下razor,引擎接管并提前拆分(剃刀视图可以预先编译) - 在这种情况下它会像(不考虑js编码):
$('#@buttonName')...
或(替代):
$('#@(buttonName)')...
最后一个选项是只针对一个类进行编码,只将类(在服务器上)添加到你想要的按钮 - 然后它是一个常量:
$('.some-class')...