c#中用于javascript的多级引号

Multiple levels of quotes in C# for javascript

本文关键字:多级 javascript 用于      更新时间:2023-09-26

我有一个"自定义控件"项目,它构建了一个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();
    }
}

注意:结束脚本标签是由调用应用程序在追加前添加的。

我的建议是把整个代码放在一个txt文件中,这个txt文件应该被标记为嵌入式资源。如果文本的某些部分应该根据变量值进行格式化,解决方案是使用字符串。

加载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!");
   }

我希望它有帮助。致以最亲切的问候。