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

时间:2010-07-09 13:48:03

标签: jquery asp.net-mvc

我正在进行ajax“发布”操作,我需要找出行动的网址。

为此我正在使用

   var url = '<%= Url.Action("Action", "Controller") %>';

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

我尝试将我的JS include设置为runat =“server”但这个错误。

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

可以这样做吗?

谢谢, 钢钣

3 个答案:

答案 0 :(得分:5)

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

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

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

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

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

然后在你的javascript中你可以:

$(function() {
    $('#fooAnchor').click(function() {
        $('#result').load(this.href);
        return false;
    });
});

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

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

答案 1 :(得分:1)

我最近使用的另一种方法是创建一个包含操作的对象: -

<script type="text/javascript">        
  Actions = {
              Create: "<%= Url.Action("Create") %>",
              Edit: "<%= Url.Action("Edit") %>",
              GetGridData: "<%= Url.Action("GetGridData") %>"
            };        

</script>

然后在Javascript中使用它: -

$(celDiv).html("<a href=" + Actions.Edit + "/" + id + ">" + $(celDiv).text() + "</a>");

这很好用,因为这些动作都包含在一个地方。

答案 2 :(得分:1)

是的,你可以,但你可能不想这样做。

完全有可能让asp.net管道处理js文件的请求,它只是在IIS中设置关联的一种情况。然而,它会用智能感知器发挥作用,并且可能会不必要地混淆。

对于ajax帖子,我找到的最好的方法是用适当的action属性集写出表单。然后使用JS读取此属性。这样,如果您更改表单的操作,JS也会更新。这也符合js为您的页面添加功能而不是完全定义它们的想法。