C# 转义字符
如何转义引号以使该语句C# 转义字符,c#,javascript,C#,Javascript,如何转义引号以使该语句 string sScript =@"<script language='javascript'>function ShowDropDown(){var combo = $find("""+this.ClientID+""");combo.showDropDown(true);}</script>"; 编辑-更新 我可能问错了这个问题,因为我不断地犯不同的错误。如果我将javascript直接放在页面上,函数正常工作。当我以这种方式注入javasc
string sScript =@"<script language='javascript'>function ShowDropDown(){var combo = $find("""+this.ClientID+""");combo.showDropDown(true);}</script>";
编辑-更新
我可能问错了这个问题,因为我不断地犯不同的错误。如果我将javascript直接放在页面上,函数正常工作。当我以这种方式注入javascript时,它不起作用
我是在代码隐藏中做这件事的
string sScript =@"<script language='javascript'> function ShowDropDown(){ var combo = $find("""+this.ClientID+@"""); combo.showDropDown(true); } </script>";
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "autoopendropdown", sScript, false);
OnClientFocus = "ShowDropDown()";
string sScript=@“函数ShowDropDown(){var combo=$find(“+this.ClientID+@”);combo.ShowDropDown(true);}”;
ScriptManager.RegisterStartupScript(this.Page,this.Page.GetType(),“autoopendropdown”,sScript,false);
OnClientFocus=“ShowDropDown()”;
它是这样生成的
<script language='javascript'> function ShowDropDown(){ var combo = $find("ctl00_ctl00_MainContent_MainContent_VendorTypeIdComboBox"); combo.showDropDown(true); } </script>
function ShowDropDown(){var combo=$find(“ctl00_ctl00_MainContent_MainContent_VendorTypeIdComboBox”);combo.ShowDropDown(true);}
但是变量combo为空,这就是问题所在。我不明白为什么当它注册时,代码隐藏不起作用,当它正常地写在页面上时,它起作用。在C#(和大多数C族语言)中双引号的转义是
\”
或者您可以只使用单引号,因为它在JavaScript中是有效的。如果我正确理解您的问题,您希望将
this.ClientID
与脚本的其余部分连接起来
您可以使用String.Format
方法执行此操作,如下所示:
string scriptFormat = @"<script language='javascript'>function ShowDropDown(){var combo = $find(""{0}"");combo.showDropDown(true);}</script>";
string sScript = String.Format(scriptFormat, this.ClientID);
string scriptFormat=@“函数ShowDropDown(){var combo=$find(“{0}”);combo.ShowDropDown(true);}”;
string sScript=string.Format(scriptFormat,this.ClientID);
请注意,在逐字字符串文本中,
“
生成单个”
字符。简单方法:在第二个字符串文本的开头添加相同的@
:
string sScript =@"<script language='javascript'>function ShowDropDown(){var combo = $find("""+this.ClientID+@""");combo.showDropDown(true);}</script>";
string sScript=@“函数ShowDropDown(){var combo=$find(“+this.ClientID+@”);combo.ShowDropDown(true);}”;
更好的方法:使用string.Format
string sScript = string.Format(
@"<script language='javascript'>
function ShowDropDown(){
var combo = $find(""{0}"");combo.showDropDown(true);
}
</script>",
this.ClientID);
string sScript=string.Format(
@"
函数显示下拉列表(){
var combo=$find(“{0}”);combo.showDropDown(true);
}
",
这是(ClientID);
(最佳方法:使用不引人注目的javascript分离关注点。)您可以使用
\
字符来转义关注点
有关转义组合的完整列表,请参见第2.4.4.4节C#。string sScript=“\n”+
“函数ShowDropDown(){\n”+
“var combo=$find(”“+this.ClientID+”“”);\n”+
“组合。显示下拉列表(true);\n”+
“}\n”+
"";
注意:脚本标记不推荐使用语言,请使用类型
string sScript =@"
<script type='text/javascript'>
function ShowDropDown(){
var combo = $find(""" + this.ClientID + @""");
combo.showDropDown(true);
}
</script>";
string sScript=@”
函数显示下拉列表(){
var combo=$find(“+this.ClientID+@”);
组合。决战下拉列表(true);
}
";
如果在JavaScript中使用单引号,生活可能会更轻松。。。此外,您还需要确保没有机会在要连接的变量中获得引号-您可能需要添加类似“在参数中转义所有引号”的方法…每个人都被C“引号”挂起了。这是有效的。他正在从C#输出javascript。是的,问题是“读起来像这样”,这在这里的大多数答案中被忽略了@rein,你的回答提供了一种方法。换行符是问题中的格式问题,所以不是全部在一行。这个问题字面上说是“我如何才能转义引号”,并将在+“
处失败,并出现错误”;预期“@TravisJ-我不确定您在哪里看到错误”;从更新的问题文本来看,情况似乎并非如此。恶心是我在这里的第一个想法。它不漂亮,但没有模板语言,您没有太多选择。是的,它可以工作,但也可以使用字符串文字查看我的答案。获得与“格式/外观”相同的结果“许多答案中缺少的要求。我们将让OP决定哪种方法最好。:)@马克:我在两种方法(你的和我的)之间左右为难。我的很难看,而你的却有一个不幸的副作用,那就是它弄乱了C#文件中的程序缩进,因此很难在字符串赋值前后对齐语句。
string sScript = "<script language='javascript'>\n" +
"function ShowDropDown() {\n" +
" var combo = $find(""" + this.ClientID + """);\n" +
" combo.showDropDown(true);\n" +
"}\n" +
"</script>";
string sScript =@"
<script type='text/javascript'>
function ShowDropDown(){
var combo = $find(""" + this.ClientID + @""");
combo.showDropDown(true);
}
</script>";