C#中的多个引用级别用于javascript

时间:2013-05-17 20:33:04

标签: c# javascript escaping special-characters

我有“自定义控件”项目,它构造一个javascript字符串以插入另一个应用程序。应用程序调用“自定义控件”来确定某些行为。

我遇到的问题涉及在包含javascript的字符串中需要多级引号。在下面的版本中,我尝试转义内部引号,但IE引发错误(由于错误80020101无法完成操作)。我通过将javascript放在一个单独的js文件中并从插件代码中调用它来解决类似的问题。但是,在这种情况下,我无法让应用程序“看到”js文件。如何将javascript放入我可以传递的字符串中?

相关代码是:

class Class1 : Literal
{
    protected override void CreateChildControls()
    {
        var controlHtml = new StringBuilder();

        controlHtml.Append("<script type='text/javascript'>");
        controlHtml.Append("$('#prodcon_error_msg').css('display', 'none');" +
                           "$('#prodcon_client_id_filterimg').click(function() {" +
                           "ShowFilterDialog('Client ID', 'clientId');" +
                           "});");
        controlHtml.Append("function ShowFilterDialog(criteriaName, filterTitle) {" +
                           "alert('show dialog code here for ' + criteriaName);" +
                           "var filterDialogDiv = document.createElement('DIV');");

        controlHtml.Append("filterDialogDiv.innerHTML = \"<div id='customaccountcriteriafilterdialog' class='dialogback'><div class='dialogheadingarea'>" +
                            "<span class='dialogtitle' style='float: left;'>&nbsp;&nbsp;\" + filterTitle + \" Lookup</span>" +
                            "<img class='dialogcloseimage' onmouseup=\"removeElement('customaccountcriteriafilterdialog');\" src='../../images/boxy.gif'/>" +
                            "</div><br/>Key word: <input type='text' id='criteriaFilterKeyword' /></div>");

        controlHtml.Append("filterDialogDiv.style.position = 'absolute';" +
                           "filterDialogDiv.style.left = '300px';" +
                           "filterDialogDiv.style.top = '85px';" +
                           "filterDialogDiv.style.Zindex = 4; " +
                           "document.body.appendChild(filterDialogDiv);" +
                           "}");

        this.Text = controlHtml.ToString();
    }
}

注意:在附加之前,调用应用程序会添加结束脚本标记。

1 个答案:

答案 0 :(得分:0)

我的建议是将整个代码放在一个txt文件中,这个txt文件应该标记为embedded resource。如果文本的某些部分应根据变量值进行格式化,则解决方案是使用string.Format来执行此操作。

要加载txt文件,只需使用

即可
try
   {
      var _assembly = Assembly.GetExecutingAssembly();
      var _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNamespace.MyTextFile.txt"));
var text = _textStreamReader.ReadToEnd();

// use the variable text for something...
   }
   catch
   {
      MessageBox.Show("Error accessing resources!");
   }

我希望它有所帮助。最好的问候。