C# 如何在代码中嵌入其他编程语言?

C# 如何在代码中嵌入其他编程语言?,c#,javascript,C#,Javascript,在ASP.NET和MOSS开发中使用C#时,我们通常必须将JavaScript嵌入到C#代码中。为了实现这一点,似乎有两种流行的思想流派: string blah = "asdf"; StringBuilder someJavaScript = new StringBuilder(); someJavaScript.Append("<script language='JavaScript' >"); someJavaScript.Append("function foo()\n");

在ASP.NET和MOSS开发中使用C#时,我们通常必须将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”;
StringBuilder someJavaScript=新建StringBuilder();
someJavaScript.Append(“”);
Append(“函数foo()\n”);
someJavaScript.Append(“{\n”);
Append(“var bar='{0}';\n”,等等);
someJavaScript.Append(“}\n”);
someJavaScript.Append(“”);
另一个学派是这样的:

string blah = "asdf";
string someJavaScript = @"
    <script language='JavaScript' >
    function foo()
    {
      var bar = '" + blah + @"';
    }
    </script>";
string blah=“asdf”;
字符串someJavaScript=@”
函数foo()
{
变量条=“+blah+@”;
}
";
有比这两种方法更好的方法吗?我个人喜欢第二个,因为您可以看到JavaScript的整个部分(或其他语言块,无论是SQL还是其他语言块),它还可以帮助在该特定语言的另一个编辑器之间复制代码

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


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

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

字符串文本的原因之一是:可读性


(性能不是问题,这是我们谈论的MOSS…

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

不过,我想把它扩展到:

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

如果要在字符串中插入一些内容,string.Format方法将比内联连接更具可读性。

第二种方法,尽管使用外部文件更好,并且允许在不重新编译的情况下对应用程序进行修改

您还需要一种好的、可读的方式来插入变量。最简单的方法是使用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;
}
您可以传递任何对象,其属性将通过ASP样式的转义语法直接访问

显然,上面给出的实现不是很有效,但它很短

另一种可能是编写一个返回JavaScript的.aspx页面,然后您可以使用
引用将其包含在HTML页面中。您可以成为
应用程序/x-javascript


这将允许您使用普通的ASP.NET
标记对其进行修改,并且已经是一个具有外部文件的快速、健壮的解决方案,当您对脚本进行编辑时会自动编译。

我们为此编写了一个库,它提供了在C代码中嵌入JavaScript的流畅语法。你可以阅读更多关于它的内容

简而言之,您的示例可以写成:

var function = JS.Function("foo").Do(
    JS.Var(JS.Id("bar").AssignWith(blah)));
string someJavaScript = "<script>" + function + "</script>";
var function=JS.function(“foo”).Do(
JS.Var(JS.Id(“bar”).AssignWith(blah));
字符串someJavaScript=“”+函数+”;

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

我也一直想问这个问题。第二个看起来更干净,接下来尝试控件的动态命名。。。然后它变得更加丑陋,因为您必须使用Control.clientDocument.getElementById(“+String.Format(“{0}{1}”,base.ClientID,“foobar”)+@“)……是的。。这让我们很难合作。他们已经从使用MOSS的劣势开始,在大多数情况下,最好是这样做。如果你仔细组织你的代码,就不要这样做。我的经验是,通常只有几个ID,因此必须从服务器端代码中提取。这些可以像上面一样插入到嵌入的初始值设定项中。如果您想要格式化和可读性,请使用JS文件。@Ishmael,您能提供一个在资源中使用初始值设定项的示例吗?无,如果您将JS作为嵌入脚本加载到资源部分,您仍然需要重新编译来更改它,对吗?与代码一起使用有什么好处?是的,如果在可执行文件中更改了任何内容,通常您必须重新编译应用程序,尽管您当然可以只使用资源编辑器(例如PE explorer)。主要的好处是在可执行文件中以节的形式表示不同的文件,因此在c#代码和javascript之间有一种分离形式,使得维护/更新更容易,同时保持所有内容都是自包含的(否则,您也可以只加载一个独立的*.js文件)。此外,如果需要的话,您当然可以轻松地加密嵌入的js文件。这是一个非常好的建议,尽管使用一系列替代品可能会很快变得笨拙。那么您是否正确地编码了放入其中的字符串?如果里面有撇号或反斜杠呢?或者,天哪,一个小于运算符?这适用于许多语言,例如,在VB中嵌入SQL。你能举个例子,将它放在外部文件中以避免重新编译吗?none提供的答案提到将其放在可执行文件的资源部分,但这需要重新编译才能更改。我添加了一个非常简单的例子-如果您正在构建此类应用程序,您可能希望使用ASP.NET路径映射函数在web应用程序中定位文件。非常有趣。我想知道这转换成MOSS Web部件/解决方案范例有多容易。。。
string js = Insert(new { divList, url }, File.ReadAllText("someFile.js"));
var function = JS.Function("foo").Do(
    JS.Var(JS.Id("bar").AssignWith(blah)));
string someJavaScript = "<script>" + function + "</script>";