使用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。
我还更改了示例以显示与生成的代码的交互。
答案 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)
字符串文字有一个原因:可读性。
(表现不成问题,这是我们谈论的MOSS ......)
答案 4 :(得分:1)
我们为此目的编写了一个库,它提供了一种流畅的语法,可以在C#代码中嵌入JavaScript。您可以阅读更多相关信息here。
简而言之,您的示例将写为:
var function = JS.Function("foo").Do(
JS.Var(JS.Id("bar").AssignWith(blah)));
string someJavaScript = "<script>" + function + "</script>";
例如,如果它包含特殊字符,它将确保正确引用blah变量的内容。