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

Nat*_*itt 5 javascript c#

使用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>");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

mqp*_*mqp 7

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

但是,我会将其扩展到:

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

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


Dan*_*ker 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;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

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

或者,如果脚本位于外部文件中:

string js = Insert(new { divList, url }, File.ReadAllText("someFile.js"));
Run Code Online (Sandbox Code Playgroud)

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

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

另一种可能性是编写一个返回JavaScript的.aspx页面,然后您可以将其包含在带有<script>引用的HTML页面中.您可以设置页面的ContentTypeapplication/x-javascript.

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