[英]ASP.NET inline server tags
我想首先说我的代码工作正常,这更像是一个“如何做到最好”的问题。
所以我的.aspx
文件中有这样的代码:
function EditRelationship() {
var projects=<%= GetProjectsForEditRelationship() %>;
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
var rels=<%= GetRelationshipsForEditRelationship() %>;
// etc
}
再次,它工作正常。 问题是VS2008对这样的代码有点窒息,它强调了标签中的<
字符(带有相关警告),然后拒绝为其余的javascript提供代码完成。 它也拒绝格式化我的文档,给出解析错误 。 最后一部分是我最烦恼的事。
我可以把它们中的一些放进eval
,但是添加额外的图层和运行时性能命中只是为了关闭VS,这似乎有点愚蠢,而且它并不总是一个选项(我不记得我的头顶在哪里这不是一个选择,但相信我,我有一个奇怪的结构)。
所以我的问题是, 你如何最好地写这个 (哪里最好意味着VS投诉最少)? eval
和ajax调用都不适合这个imo。
您可以在代码隐藏中从您的页面执行此操作
ClientScript.RegisterArrayDeclaration("projects", "1, 2, 3, 4");
或者构建类似JSON的东西,你可以写出来
ClientScript.RegisterClientScriptBlock(GetType(), "JSONDeclarations", "your json stuff");
更新根据我的评论
<script id="declaration" type="text/javascript">
var projects=<%= GetProjectsForEditRelationship() %>;
var rels=<%= GetRelationshipsForEditRelationship() %>;
</script>
<script type="text/javascript">
function EditRelationship() {
// fill in the projects list
$('#erProjectsSelect').empty();
for(var i in projects)
$('#erProjectsSelect').append('<option value='+projects[i][0]+'>'+projects[i][1]+'</option>');
}
</script>
如果您的目标是减少VS投诉,并且如果您正在运行asp.net 4(支持静态客户端ID),那么像以下这样的策略会更好吗?
这比你的解决方案更多的工作,你将添加一些数据到回发(如果你执行任何)但它不会导致任何VS投诉我猜:)
最好的解决方案是将javascript放在一个单独的文件中,并完全避免这种情况。 对于这个特定的功能,你正在做服务器端的工作。 为什么不构建你想要在代码隐藏中动态添加的选项列表,将它们放在一个隐藏的div中,然后让jQuery从已经呈现的HTML中添加它们?
如果您确实希望以这种方式动态创建很多javascript,请考虑在代码隐藏中使用ScriptManager来设置您需要的变量作为脚本并注册它们,然后您的内联脚本将不需要转义
ScriptManager.RegisterClientScript("projects = " + GetProductsForEditRelationship());
(基本上,这不是完整的语法,它取决于上下文)。 然后参考函数中的“项目”。
(编辑)
更大规模地执行此操作的一种更简洁的方法,在代码隐藏中设置您需要的所有内容:
string script = "var servervars = {" +
"GetProductsForEditRelationship: " + GetProductsForEditRelationship() +
"GetRelationshipsForEditRelationship: " + GetRelationshipsForEditRelationship() +
"}"
并指的是:
servervars.GetProductsForEditRelationship
当然,如果你这么做了很多,你可以创建一个类来自动构建脚本。
我没有安装VS2008进行测试,所以带上一粒盐,但你有没有试过这样的东西?
var projects = (<%= GetProjectsForEditRelationship() %>);
这样的事情可能会欺骗JavaScript解析器忽略表达式的内容。
对于它的价值,VS2010正确解析并突出显示您的原始代码段。
是否可以将其移至VS2010? 我只是复制并粘贴了你的代码,IDE正确地解释了它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.