[英]Add ASP.NET server script to mostly-static .JS / .CSS files without losing IntelliSense?
使用VS2008和ASP.NET 3.5(或VS 2010 / .NET 4.0?),如何在大多数静态JavaScript和CSS文件中包含一些动态ASP.NET服务器端代码?
我想这样做是为了避免克隆整个JS或CSS文件,只改变其中一小部分多租户网站。 后来,我想扩展解决方案来处理javascript / CSS中的本地化,动态调试/跟踪支持,以及通过将内容动态注入JavaScript和CSS可以获得的其他很酷的东西。
困难的是我不想丢失静态文件所带来的所有酷事,例如:
静态文件(例如标题/压缩)的服务器端优点可以通过HttpHandler伪造,但保留IDE优点(intellisense / coloring / etc)让我感到难过。
理想的解决方案将满足以下要求:
到目前为止,我提出的最佳(hacky)解决方案是:
我已经使用了Darick_c的HttpCompression模块的修改版本,它可以为我处理上述几乎所有内容,因此修改它以支持上述解决方案并不会太难。
但我的解决方案是hacky。 我想知道是否有人有一个更轻量级的方法来解决这个问题,它不会失去Visual Studio的静态文件优点。
我知道我也可以破解一个仅限客户端的解决方案,我将所有的JS和CSS分成“变化”和“不会变化”的文件,但这种解决方案的性能和维护开销是我的喜欢避免。 我真的想要一个服务器端解决方案,所以我可以在服务器上维护一个文件,而不是N + 1个文件。
我还没有尝试过VS10 / .NET 4.0,但我对Dev10 / .net4解决方案持开放态度,如果这是使这种情况有效的最佳方式。
谢谢!
我通过让母版页在每个页面的页脚中输出动态生成的JSON对象来处理类似的问题。
我需要让我的js popup登录对话框支持本地化。 因此,使用JSON.NET进行序列化,我创建了一个页面可以访问的母版页的公钥/值集合属性,以便将键/值放入短语键/本地化短语对中。 然后,母版页呈现一个动态JSON对象,该对象包含这些值,以便静态js文件可以引用这些动态值。
对于js登录框,我让母版页设置了本地化的值。 这是有道理的,因为母版页还包含login.js文件。
我确实对您对从客户端发出的http请求数量以及返回的有效负载的关注表示赞赏。 我认识和工作的人太多,忽略了那些简单的优化。 但是,任何时候我遇到你遇到的同一个问题(实际上经常是这样),我发现我通常要么在某个地方转错,要么试图以错误的方式解决问题。
就你的JS问题而言,我认为Frank Schwieterman在上面的评论中是正确的。 我将研究如何通过setter公开JS的动态部分。 一个非常基本的例子是,如果您想要在登录时向用户显示自定义欢迎消息。 在JS文件中,您可以公开setMessage(message)方法。 然后,包含脚本的页面将调用该方法。 结果,你会有类似的东西:
<body onLoad="setMessage('Welcome' + <%= user.FirstName %>);">
显然,可以通过将对象或方法传递到静态JS文件来扩展,以便为您提供所需的功能。
在回答CSS问题时,我认为你可以从Shawn Steward的评论中获得很多好处。 您可以在基本文件中定义CSS的某些静态部分,然后在其他文件中重新定义要更改的部分。 因此,您可以根据您所包含的文件来决定您网站的外观。 此外,因为您不想接受额外的http请求(请记住,如果您将这些文件设置为缓存一周,一个月等,这是一次性请求),您可以执行类似组合的操作CSS文件在编译或运行时编译成单个文件。
类似以下链接可能有助于指明您正确的方向:
http://www.asp.net/learn/3.5-SP1/video-296.aspx?wwwaspnetrdirset=1
http://dimebrain.com/2008/04/resourceful-asp.html
通过在运行或编译时利用组合,您可以通过允许逻辑上分离CSS和JS文件来获得两全其美,同时还可以减少压缩和组合文件带来的有效负载和请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.