我可以将ASP.NET放在Js文件中吗?

4im*_*ble 1 asp.net-mvc jquery

我正在做一个ajax"Post"动作,我需要弄清楚我的动作的URL.

为此,我正在使用

   var url = '<%= Url.Action("Action", "Controller") %>';
Run Code Online (Sandbox Code Playgroud)

但是这段代码存在于一个相当大的Js文件中,该文件正在加载到我的MVC视图中.我不想将它全部移到我的视野中,因为它太大而且看起来一团糟.

我尝试将我的JS include设置为runat ="server"但是这个错误.

<script runat="server" src="<%: ResolveUrl("~/Scripts/Custom/MyScript.js")%>" type="text/javascript" ></script>
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?

谢谢,Kohan

Dar*_*rov 5

不,你不能把ASP.NET放在一个JavaScript文件中.Javascript文件是静态资源,应由Web服务器直接提供.它们永远不应包含任何服务器端语言.您可以url在视图中定义为全局变量:

<script type="text/javascript">
    var url = '<%= Url.Action("Action", "Controller") %>';
</script>
Run Code Online (Sandbox Code Playgroud)

然后url在您的javascript文件中使用此变量.

请注意,根据您对此变量所做的操作,可能会有更好的方法.例如,假设您在视图中有一个想要ajaxify的锚:

<%: Html.ActionLink("some text", "actionName", new { id = "fooAnchor" }) %>
Run Code Online (Sandbox Code Playgroud)

然后在你的javascript中你可以:

$(function() {
    $('#fooAnchor').click(function() {
        $('#result').load(this.href);
        return false;
    });
});
Run Code Online (Sandbox Code Playgroud)

因此,根本不需要声明任何变量.另一种选择是定义一个带有参数的javascript函数,以便您可以根据需要传递它.

结论:将您的javascript文件视为可重用的组件,明天您可以将其插入基于Java Servlets的酷站点并将其托管在CDN上.你甚至可以尝试将它们转换为可重用的jQuery插件.不要试图将它与服务器端语言混合,因为它会导致强大的耦合,丑陋的代码 - 标记汤.