【问题标题】:Processing ASP.NET expressions inside an external Javascript file在外部 Javascript 文件中处理 ASP.NET 表达式
【发布时间】:2026-02-07 10:55:01
【问题描述】:

在外部 Javascript 文件中使用 ASP.NET expressions 的最佳做法是什么?

我目前正在使用 ASP.NET MVC 框架,需要在外部 JS 引用中执行类似以下操作:

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

可以将它移到视图中,当然,但我想将它分开。

附言

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

【问题讨论】:

    标签: asp.net javascript asp.net-mvc


    【解决方案1】:

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

    ASP.NET 不处理外部 js 文件,它们只是发送到 Web 客户端。所以没有办法在 .js 文件中使用 ASP.NET 表达式,除非你弄乱了 IIS 配置并将其更改为处理 .js 文件,因为它会处理 ASP.NET 文件。

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

    【讨论】:

    • 是的,我知道 IIS 就是这种情况,我希望有一种方法可以告诉 IIS 通过配置预处理 JS 文件 - 也许已经有一个 HttpModule 或 HttpHandler 可以做是吗?
    【解决方案2】:

    Jim 是正确的,要让 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>
    

    祝你好运!

    【讨论】:

    • P.S.如果你有多个变量要传入,你可以使用一个漂亮整洁的 JSON 结构作为这些参数...
    最近更新 更多