0

このステートメントになるように、引用符をエスケープするにはどうすればよいですか

string sScript =@"<script language='javascript'>function ShowDropDown(){var combo = $find("""+this.ClientID+""");combo.showDropDown(true);}</script>";

このように読みます

function ShowDropDown() {
                var combo = $find("ctl00_ctl00_MainContent_MainContent_VendorTypeIdComboBox");
                combo.showDropDown(true);
            }

編集-更新 さまざまなエラーが発生し続けるため、質問を間違った可能性があります。通常、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()";

このように生成されます

<script language='javascript'> function ShowDropDown(){  var combo = $find("ctl00_ctl00_MainContent_MainContent_VendorTypeIdComboBox"); combo.showDropDown(true); } </script>

しかし、変数コンボはnullであり、それが問題です。コードビハインドに登録されていると機能せず、ページに正常に書き込むと機能する理由がわかりません。

4

6 に答える 6

1

@簡単な方法: 2 番目の文字列リテラルの先頭に同じものを追加します。

string sScript =@"<script language='javascript'>function ShowDropDown(){var combo = $find("""+this.ClientID+@""");combo.showDropDown(true);}</script>";

より良い方法: string.Format を使用します

string sScript = string.Format(
@"<script language='javascript'>
    function ShowDropDown(){
        var combo = $find(""{0}"");combo.showDropDown(true);
    }
</script>",
    this.ClientID);

(最善の方法: 目立たない JavaScript を使用して懸念事項を分離します。)

于 2013-03-22T00:02:09.680 に答える
1
string sScript = "<script language='javascript'>\n" +
                 "function ShowDropDown() {\n" +
                 "    var combo = $find(""" + this.ClientID + """);\n" +
                 "    combo.showDropDown(true);\n" +
                 "}\n" +
                 "</script>";
于 2013-03-22T00:04:20.890 に答える
0

C# (およびほとんどの C ファミリ言語) での二重引用符のエスケープは次のとおりです。\"

または、JavaScript で有効であるため、単一引用符を使用することもできます。

于 2013-03-21T23:59:47.033 に答える
0

あなたの質問を正しく理解できたら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);

逐語的な文字列リテラル内で""は、単一の"文字が生成されることに注意してください。

于 2013-03-22T00:01:15.843 に答える
0

文字を使用してそれらをエスケープできます\

エスケープの組み合わせの完全なリストについては、セクション 2.4.4.4 C#言語仕様の文字リテラルを参照してください。

于 2013-03-22T00:02:16.057 に答える
0

注: language は script タグでは非推奨です。type を使用してください

string sScript =@"
<script type='text/javascript'>
function ShowDropDown(){
                var combo = $find(""" + this.ClientID + @""");
                combo.showDropDown(true);
            }
</script>";
于 2013-03-22T00:18:31.737 に答える