2010-03-26 89 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