如何将其他编程语言嵌入到代码中?

时间:2009-05-20 18:47:38

标签: c# javascript

使用C#进行ASP.NET和MOSS开发,我们经常需要将JavaScript嵌入到C#代码中。要做到这一点,似乎有两种流行的思想流派:

string blah = "asdf";
StringBuilder someJavaScript = new StringBuilder();
someJavaScript.Append("<script language='JavaScript' >");
someJavaScript.Append("function foo()\n");
someJavaScript.Append("{\n");
someJavaScript.Append("  var bar = '{0}';\n", blah);
someJavaScript.Append("}\n");
someJavaScript.Append("</script>");

另一种思想流派是这样的:

string blah = "asdf";
string someJavaScript = @"
    <script language='JavaScript' >
    function foo()
    {
      var bar = '" + blah + @"';
    }
    </script>";

有比这两种方法更好的方法吗?我个人喜欢第二部分,因为你可以看到JavaScript的整个部分(或其他语言块,无论是SQL还是你有什么),它还有助于在该特定语言的另一个编辑器之间复制代码。

编辑:
我应该提到最终目标是在最终的网页中格式化JavaScript。

我还更改了示例以显示与生成的代码的交互。

5 个答案:

答案 0 :(得分:7)

第二种显然是方式,方式,更清晰。第一次做这件事根本没有任何理由。

但是,我会将其扩展到:

string someJavaScript = string.Format(@"
    <script language='JavaScript' >
      function foo()
      {
          var bar = '{0}';
      }
    </script>", blah);

如果要在字符串中添加几个内容,string.Format方法将比内联连接更具可读性。

答案 1 :(得分:5)

第二种方法,虽然使用外部文件要好得多,但允许对应用程序进行修改而无需重新编译它们。

您还需要一种很好的,可读的方式来插入变量。最简单的方法是使用string.Format,但每个变量都是{0}或{1},因此这是不可读的。

怎么样:

public static string Insert(object dictionary, string into)
{
    foreach (PropertyInfo property in dictionary.GetType().GetProperties())
        into = into.Replace("<%" + property.Name + "%>", 
                            property.GetValue(dictionary, null).ToString());

    return into;
}

然后你可以这样做:

string js = Insert(new { divList, url }, 
                   @"jQuery(document).ready(function(){
                        jQuery('#<%divList%>').jqGrid({
                            url:'<%url%>',
                            datatype: 'json',
                            mtype: 'GET', ... etc...");

或者如果脚本在外部文件中:

string js = Insert(new { divList, url }, File.ReadAllText("someFile.js"));

您可以传递任何对象,并且可以通过ASP样式的转义语法直接访问其属性。

上面给出的实现显然效率不高,但它很短。

另一种可能性是编写一个返回JavaScript的.aspx页面,然后您可以将其包含在带有<script>引用的HTML页面中。您可以set the ContentType of the page成为application/x-javascript

这将允许您使用普通的ASP.NET <%= %>标记来修改它,并且已经是一个快速,强大的外部文件解决方案,在您编辑脚本时动态自动编译。

答案 2 :(得分:3)

如何将JavaScript作为资源部分添加到文件中,以便可以将其作为(嵌入式)脚本从可执行文件的资源部分加载?

答案 3 :(得分:1)

我们为此目的编写了一个库,它提供了一种流畅的语法,可以在C#代码中嵌入JavaScript。您可以阅读更多相关信息here

简而言之,您的示例将写为:

var function = JS.Function("foo").Do(
    JS.Var(JS.Id("bar").AssignWith(blah)));
string someJavaScript = "<script>" + function + "</script>";

例如,如果它包含特殊字符,它将确保正确引用blah变量的内容。

答案 4 :(得分:1)

字符串文字有一个原因:可读性。

(表现不成问题,这是我们谈论的MOSS ......)