2010-03-26 60 views
4
<head runat="server"> 
     <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
     <link href="../../Content/css/layout.css" rel="stylesheet" type="text/css" />  
     <script type="text/javascript" src="/Areas/CMS/Content/js/jquery-1.3.2.min.js"></script>  
     <script type="text/javascript" src="/Areas/CMS/Content/js/jquery.jeditable.js"></script> 
     <script type="text/javascript" src="/Areas/CMS/Content/js/jeditable.js"></script> 

     <script type="text/javascript"> 
      $(document).ready(function() { 
       $(".naslov_vijesti").editable('<%=Url.Action("UpdateSettings","Article") %>', { 
         submit: 'ok', 
         submitdata: {field: "Title"}, 
         cancel: 'cancel', 
         cssclass: 'editable', 
         width: '99%', 
         placeholder: 'emtpy', 
         indicator: "<img src='../../Content/img/indicator.gif'/>" 
       }); 
      }); 
     </script>  
</head> 

这是的Site.Master文件的头标记。我想从头部删除这个多行部分,并将其放置在现在为空的jeditable.js文件中。如果我复制/粘贴,那么<% %>部分将不会执行。在PHP中,我会将js文件保存为jeditable.js.php,并且服务器将编译<?php ?>标记中的代码。任何想法如何解决这个问题?

由于提前,
保存js文件用C#命令

+0

你混合项目WebForms和MVC? – R0MANARMY 2010-03-26 21:47:40

+0

嗯......说实话,我不知道。我从2个月前开始使用ASP.NET MVC,在此之前我从未使用C# – 2010-03-26 21:57:28

回答

4

在PHP中,我将js文件保存为jeditable.js.php,服务器将编译代码。

这里要记住的一件事是,PHP现在被迫在每个请求上处理整个JavaScript文件。这通常是“坏事”TM,并且它耗尽了可以在别处花费的服务器资源。

由于Raj Kimal的回答已经提到,我们在ASP.Net中以尽可能最有效的方式处理这个问题的方法是使用一个简短的脚本,该脚本内嵌页面,不做任何事情,而是将服务器代码的结果分配给变量。在之前执行来声明其他脚本,然后可以直接在这些脚本中使用这些变量。这样,你不必为你的外部javascript文件做任何额外的服务器工作。

我会做出一个除了Kimal先生的答案。通常最好将这些变量放在一个对象中,以避免命名冲突。事情是这样的:

<head runat="server"> 
    <script language="javascript"> 
     var ServerCreated = { 
      ArticleAction:'<%=Url.Action("UpdateSettings","Article") %>', 
      OtherVar:'some server data' 
     } 
    </script> 
</head> 

然后你jeditable.js文件应该是这样的:

$(document).ready(function() { 
      $(".naslov_vijesti").editable(ServerCreated.ArticleAction, { 
        submit: 'ok', 
        submitdata: {field: "Title"}, 
        cancel: 'cancel', 
        cssclass: 'editable', 
        width: '99%', 
        placeholder: 'emtpy', 
        indicator: "<img src='../../Content/img/indicator.gif'/>" 
      }); 
     }); 
+0

您需要将'ServerCreated.ArticleAction'传递给js函数,在这种情况下 – 2010-03-26 22:11:26

+0

@s_hewitt感谢提醒我展示'如何使用它'部分 – 2010-03-26 22:20:01

+0

我刚刚计算出它:)谢谢! – 2010-03-26 22:24:08

2

定义您的可变部分作为一个js变量。

变种富= '<%= Url.Action( “UpdateSettings”, “条”)%>'; 并将其放在js引用之前。然后在你的js文件中使用varible。

+0

不要忘记在结果中转义任何引号。 – 2010-03-26 21:55:22

+0

不错的技巧,但这仍然留下site.master – 2010-03-26 21:59:07

+0

@ile中的一些变量 - 是的,它的确如此。但是你应该这么做是有原因的,这也是适用于php的原因。 – 2010-03-26 22:20:49

1

你有几个选择,但这里的关键是,如果你需要使用< %%>语法来获取信息,你需要在ASP.NET页面的上下文中。

您可以将实际功能移动到外部文件并引用JS,然后添加一个小内联脚本块,它用两个参数调用该函数,但这会影响您想要的目的。

这里真正的问题,为什么有一个方法的额外HTTP请求的开销?

+0

会有更多的这个js函数,也许10个,所以我想把它放到外部文件 – 2010-03-26 21:53:05

+0

“你”可以“将实际的函数移动到一个外部文件,并引用JS,然后添加一个小内联脚本块,用两个参数调用函数,“ - 我真的不明白你在这里说什么......我可以将实际的功能移动到什么外部文件? – 2010-03-26 22:04:02

+0

你可以告诉asp.net处理.js文件,但我不推荐它。 – 2010-03-26 22:04:32

2

你可以把脚本.aspx文件中,并设置内容类型text/javascript@page指令。您仍然可以使用代码标签。

处理整个JavaScript文件的每个请求可以很容易地通过应用服务器侧高速缓存,使得不应该是一个问题得到缓解的成本。这也可以在@page指令中进行配置。

+0

这工作得很好,但是你失去了visual studio提供的任何语法突出显示/ intellisense。 – 2010-03-26 22:19:38

+0

没错,尽管在顶部加上了'// '修复了这个问题。不是非常漂亮的事情,但是,通过电线虽然... – 2010-03-26 22:27:07