Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转义字符_C#_Javascript - Fatal编程技术网

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>";