2017-07-07 43 views
1

我有這個劇本在我看來:編碼的Javascript在單獨的文件

@if(ViewBag.UserName != null) 
{ 
    <script type="text/javascript"> 
     $(function(){ 
      var msg = 'Welcome, @Encoder.JavaScriptEncode(ViewBag.UserName, false)!'; 
      $("#welcome-message").html(msg).hide().show('slow'); 
     }) 
    </script> 
} 

不過,我想提出的JavaScript在一個單獨的文件,但是當我做了HTML輔助「編碼器」不會顯然工作,我將如何解決這個問題,以便我仍然擁有編碼器,但在單獨的文件中使用Js?

回答

2

之一:(!確保您的輸出正確的Content-Type響應報頭)

  • 生成ASP.NET JavaScript的
  • 輸出的數據某處到DOM(如<meta>元素或data-*屬性),然後用JS讀取它
1

捆綁你的javascript文件,你應該養成這樣做的習慣。 Bundling可幫助您管理文件版本(以便在更新緩存文件時進行刷新),還可以爲您縮小文件,使您的數據對客戶端的處理速度更快。

在你App_Start文件夾中,有一個叫做BundleConfig.cs文件將是這個樣子:

public class BundleConfig 
{ 
    // For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862 
    public static void RegisterBundles(BundleCollection bundles) 
    { 
     /* ===================================== Scripts ===================================== */ 

     bundles.Add(
      new ScriptBundle("~/Script/JQuery/JQuery") 
       .Include("~/Scripts/JQuery/jquery-{version}.js") 
      ); 
     bundles.Add(
      new StyleBundle("~/bundles/styles/highslide") 
       .Include("~/Highslide/Highslide-ie6.css") 
       .Include("~/Highslide/Highslide.css") 
      ); 
    } 
} 

在上面的例子中,我們包括JavaScript文件(此版本由自動填充框架)和一個名爲Highslide的css庫。你可以看到在這個庫中我們可以包含多個文件。另外,請注意這些文件如何全部位於不同的目錄中。這使您可以根據自己的情況構建項目。

現在,爲了在您的視圖所有你需要做的使用是這樣的:

@Scripts.Render("~/Script/JQuery/JQuery") 
@Styles.Render("~/bundles/styles/highslide") 

雖這麼說,你現在可以在您的視圖做到這一點:

@if(ViewBag.UserName != null) 
{ 
    @Scripts.Render("~/Script/JQuery/JQuery") 
} 

至於HTML編碼器的問題,爲什麼不簡單地把你的JS文件中的JavaScript變量,然後聲明和設置變量在視圖中,然後再包含該文件。就像這樣:

@if(ViewBag.UserName != null) 
{ 
    <script type="text/javascript"> 
     var msg = 'Weclome, ' + @Encoder.JavaScriptEncode(ViewBag.UserName, false)!; 
    </script> 
    @Scripts.Render("~/Script/MyScript") 
} 

你的腳本文件可以是這樣的:

$(function(){ 
    $("#welcome-message").html(msg).hide().show('slow'); 
}) 
相關問題