2011-10-05 19 views
23

Bir Görünüm (ASPNET MVC 3), şimdi ayrı bir JavaScript dosyası için kod hareket ediyorum buayrı javascript dosyasında

if (ret = 1) 
    iconType = new google.maps.MarkerImage('@Url.Content("~/Content/images/image.png")'); 
else if (ret = 2) 
    iconType = new google.maps.MarkerImage('@Url.Content("~/Content/images/image2.png")'); 
else if (ret = 3) 
    iconType = new google.maps.MarkerImage('@Url.Content("~/Content/images/image3.png")'); 

(kullanıyordum ASPNET MVC 3 ve Razor kullanılarak Bunu kullanıyorum çünkü bir control image.png, image2.png veya image3.png) olarak ayarlanabilen vaiable değerine bağlı olarak.

Razor, @ javascript dosyasında @ Url.Content ayrıştırmıyor, Bunu işlemenin en iyi yolu nedir?

Şimdiden teşekkürler! Guillermo. i javascript ROOT değişkene atıfta

<script> 
    var ROOT = '@Url.Content("~")'; 
</script> 

Ve sonra:

cevap

43

Genellikle sayfanın başında böyle bir blok koymak Başka bir çözüm sizin JS dosyalarına render edilir

if (ret = 1) 
    iconType = new google.maps.MarkerImage(ROOT + '/Content/images/image.png'); 
else if (ret = 2) 
    iconType = new google.maps.MarkerImage(ROOT + '/Content/images/image2.png'); 
else if (ret = 3) 
    iconType = new google.maps.MarkerImage(ROOT + '/Content/images/image3.png")'); 
+0

Güzel fikir! Teşekkürler! Scriptlerin çoklu düzenlere enjekte edilmesi gerektiğinden, html yardımcısı kullanarak betik oluşturarak bunu doğaçlama yaptım, tekrar teşekkürler! – k25

+3

"~ /" zaten bir "/" ile biter - bu ikisini de eklerseniz, URL'leriniz başında "//" ile sonuçlanırsınız. Çalışmaya devam etmeli, ancak yazmanız daha da zordur (ROOT + 'Content/Images/Image.png'); – BrainSlugs83

+0

Bunu bir css görüntüsü için nasıl yaparsınız? –

7

RazorViewEngine ile tamamen. kolayca JavaScript dosya içinde Jilet Syntax'i kullanabilirsiniz Bu şekilde: Global asax dosyasında

public class CustomRazorViewEngine : BuildManagerViewEngine 
{ 
    internal static readonly string ViewStartFileName = "_ViewStart"; 

    public CustomRazorViewEngine() 
     : this(null) 
    { 
    } 

    public CustomRazorViewEngine(IViewPageActivator viewPageActivator) 
     : base(viewPageActivator) 
    { 
     AreaViewLocationFormats = new[] 
            { 
             "~/Areas/{2}/Views/{1}/{0}.cshtml", 
             "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
             "~/Areas/{2}/Views/{1}/{0}.csjs", 
             "~/Areas/{2}/Views/Shared/{0}.cshtml", 
             "~/Areas/{2}/Views/Shared/{0}.vbhtml", 
             "~/Areas/{2}/Views/Shared/{0}.csjs" 
            }; 
     AreaMasterLocationFormats = new[] 
             { 
              "~/Areas/{2}/Views/{1}/{0}.cshtml", 
              "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
              "~/Areas/{2}/Views/{1}/{0}.csjs", 
              "~/Areas/{2}/Views/Shared/{0}.cshtml", 
              "~/Areas/{2}/Views/Shared/{0}.vbhtml", 
              "~/Areas/{2}/Views/Shared/{0}.csjs" 
             }; 
     AreaPartialViewLocationFormats = new[] 
              { 
               "~/Areas/{2}/Views/{1}/{0}.cshtml", 
               "~/Areas/{2}/Views/{1}/{0}.vbhtml", 
               "~/Areas/{2}/Views/{1}/{0}.csjs", 
               "~/Areas/{2}/Views/Shared/{0}.cshtml", 
               "~/Areas/{2}/Views/Shared/{0}.vbhtml", 
               "~/Areas/{2}/Views/Shared/{0}.csjs" 
              }; 

     ViewLocationFormats = new[] 
           { 
            "~/Views/{1}/{0}.cshtml", 
            "~/Views/{1}/{0}.vbhtml", 
            "~/Views/{1}/{0}.csjs", 
            "~/Views/Shared/{0}.cshtml", 
            "~/Views/Shared/{0}.vbhtml", 
            "~/Views/Shared/{0}.csjs" 
           }; 
     MasterLocationFormats = new[] 
            { 
             "~/Views/{1}/{0}.cshtml", 
             "~/Views/{1}/{0}.vbhtml", 
             "~/Views/{1}/{0}.csjs", 
             "~/Views/Shared/{0}.cshtml", 
             "~/Views/Shared/{0}.vbhtml", 
             "~/Views/Shared/{0}.csjs" 
            }; 
     PartialViewLocationFormats = new[] 
             { 
              "~/Views/{1}/{0}.cshtml", 
              "~/Views/{1}/{0}.vbhtml", 
              "~/Views/{1}/{0}.csjs", 
              "~/Views/Shared/{0}.cshtml", 
              "~/Views/Shared/{0}.vbhtml", 
              "~/Views/Shared/{0}.csjs" 
             }; 

     FileExtensions = new[] 
          { 
           "cshtml", 
           "vbhtml", 
           "csjs", 
          }; 
    } 

    protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath) 
    { 
     return new RazorView(controllerContext, partialPath, 
          layoutPath: null, runViewStartPages: false, viewStartFileExtensions: FileExtensions, 
          viewPageActivator: ViewPageActivator); 
    } 

    protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath) 
    { 
     var view = new RazorView(controllerContext, viewPath, 
           layoutPath: masterPath, runViewStartPages: true, viewStartFileExtensions: FileExtensions, 
           viewPageActivator: ViewPageActivator); 
     return view; 
    } 
} 

sadece bu ekleyin:

RazorCodeLanguage.Languages.Add("csjs", new CSharpRazorCodeLanguage()); 
ViewEngines.Engines.Add(new CustomRazorViewEngine()); 

Ve web.config kök bu eşleme eklemek

<system.web> 
      <compilation debug="true" targetFramework="4.0"> 
       <assemblies> 
         <add assembly="Newtonsoft.Json" /> 
         <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
         <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
         <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
         <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
         <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
       </assemblies> 

       <!--Added--> 
       <buildProviders> 
         <add extension=".csjs" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor"/> 
       </buildProviders> 

Artık javascript dosyanızın içinde bir Model ile çalışabilirsiniz!

public ActionResult MyJavascriptThroughRazor() 
{ 
    var someModel = ... 
    return PartialView("filenamewithcsjsextension",someModel); 
} 
+0

[This] (http://stackoverflow.com/a/5148405/158074) daha kolay görünüyor. – rsenna

İlgili konular