2009-08-27 34 views
0

在外部JavaScript文件中使用ASP.NET expressions的最佳做法是什么?处理外部Javascript文件中的ASP.NET表达式

我目前使用的ASP.NET MVC框架,需要做类似于从外部JS参考中下面的内容:授予

jQuery(document).ready (function() { 
    jQuery ("#element<%= Model.IdFromAThing %>").click (... blah ... 
}); 

可以移动到这个视图,但我想保持分开。

P.S.

这样做的好处之一是我可以在很多地方重新使用相同的JS文件,我不想在每个视图中重复初始化逻辑(考虑它将是相同的)。

回答

2

我不认为这是可能的,除非您更改您的IIS以处理.js文件为ASP.NET。

外部js文件不是由ASP.NET处理的,它们只是发送到Web客户端。因此,除非您混淆了IIS配置并将其更改为处理.js文件,否则无法在.js文件中使用ASP.NET表达式,因为它将处理ASP.NET文件。

另一方面,您可以将.js文件重命名为.aspx,然后将其用作您的js src值。然后在将它发送到客户端之前使用ASP.NET进行处理。您只需确保输出中没有自动生成的HTML代码(只是javascript)。

+0

是的,我知道这是IIS的情况,我希望有一种方法可以告诉IIS预处理JS文件通过配置 - 也许已经有一个HttpModule或HttpHandler可以做到这一点? – Kieron 2009-08-27 22:09:27

1

吉姆是正确的,有一个JS文件包含动态内容,你需要ASP.NET引擎来解析/处理这些内容。

另一个想法是略微重构你在做什么。创建您的JS文件以接受来自您的动态页面(可以注入的)的动态参数。

在静态JS文件:例如,如下的例子可能被改写

function setItUp(idFromAThing) { 
    jQuery(document).ready (function() { 
     jQuery ("#element" + idFromAThing).click (... blah ... 
    }); 
} 

而在你的ASP.NET视图:

<script type="text/javascript" src="whatever.js"> </script> 
<script type="text/javascript"> 
setItUp(<%= Model.IdFromAThing %>); 
</script> 

祝你好运!

+1

P.S.如果你有多个变量传入,你可以使用一个漂亮的JSON结构作为这些参数。 – Funka 2009-08-27 22:12:59