国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

教你如何在 Javascript 文件里使用 .Net MVC Razor 語法

2019-11-20 14:20:00
字體:
來源:轉載
供稿:網友

相信大家都試過在一個 View 里嵌套使用 javascript,這時就可以直接使用 Razor 語法以調用 .NET 的一些方法。如以下代碼嵌套在一個 Razor 的 View 里:

<script> var currDate = '@DateTime.Now'; //直接調用.NET的方法  console.log(currDate)</script>

但另一種情況是,如果我想在一個獨立的 JS 文件里使用 Razor,那以上的方法可行不通,因為MVC不會直接解釋JS文件,只有放到 Razor view里才可以。不過在此我向大家推薦一個第三方類庫,就可讓你直接在獨立的 JS 文件里使用 Razor


此類庫名字就叫 RazorJS,這是一個開源的項目,可到以下地址下載源碼:

https://bitbucket.org/djsolid/razorjs

或者也可以直接通過Nuget進行安裝:

PM> Install-Package RazorJS

OK,先說說這個類庫能為我們帶來什么吧。安裝后你可以直接在 JS 文件里使用所有 .NET 支持的方法,如上面的代碼就可以直接放到獨立的JS文件里去使用。另外你還可以在JS文件里引用.NET的全名空間,如要調用 File 對象來讀取文本文件內容,就可以直接引用 System.IO 命名空間:

@using System.IO; var s = 'Hello at @DateTime.Now /n @File.ReadAllText(System.Web.Hosting.HostingEnvironment.MapPath("~/web.config"))';

運行后就可直接在 JS 里獲取到 web.config 文件里的所有內容。看樣子挺不錯吧,呵呵。那到底此類庫是如何運作的呢?其實它是使用了一個叫 RazorEngine 的類庫達到以上效果的。RazorEngine 是一個 Razor 的解釋引擎,其功能非常強大,我之前也在一些項目中使用過。通過此引擎,你甚至可以直接在 win form 中使用 Razor 語法,呵,不知你有沒想到其好處了?

嗯,不錯,有了此引擎,就可以完全獨立了 web 環境去使用 MVC 的 Razor ,這個功能可讓你非常方便地制定一些靈活的模板,如一些 email 模板,你可直接在模板里使用各種.NET 方法甚至自定義的對象,然后動態生成想要的內容。OK,但這個引擎并不是這次我要介紹的東西,在此只是順便說說啦

接下來說一個 RazorJS 的使用方法,如果你是直接通過 Nuget 安裝的,那么就會自動幫你配置好 web.config,這是建議的安裝方法,否則你就要自己添加 web.config 里的配置了,有好幾處地方,這里也不詳說,大家安裝了后可對比一下就知道了。要使用 RazorJS 也很簡單,只需使用以下語法引用你要的 JS 文件就可以了:

<p> @Html.RazorJSInline("~/Scripts/Example.js")</p>

不過要注意一點的是,在你的 web.config 里會有一段配置允許 RazorJS 使用的目錄,就是說你的JS文件必須放到此目錄里才可以使用此方法來引用:

<razorJSSettings handlerPath="~/razorjs.axd"> <allowedPaths> <add path="~/Scripts" /> </allowedPaths> </razorJSSettings>

最后要說一下的是其限制。有好的地方當然也有不好的一面,由于其使用的是 RazorEngine ,所以你不可以在 JS 里使用 MVC 的 HTML Helper 方法,即所有 @Html 開頭的方法。另一個問題就是其不能識別 JS 里的注釋代碼,就是說如果你在注釋里使用了 .NET 的方法也一樣會執行,如果你的方法正確就沒問題,否則就會中斷 JS 的執行直接報錯了,所以不要以為沒用的方法注釋掉就可以了哦。

關于不能執行 @Html helper的問題,我這里提供另一個解決辦法,不過這就可修改其源代碼,想折騰的朋友可以試試。其實這樣做也可以使用很多自定義的方法,更加靈活方便哦。下載了 RazorJS 源碼后,你可直接在上面修改然后重新編譯一個DLL出來,另一種方法就是將其源碼當作另一個項目,直接加到你自己的項目中去。

在其源碼中,打開 HtmlTemplateBase.cs 文件,你就可在此添加自己的方法了,然后在這里添加的方法都可直接在 JS 里調用。如在源碼中你可發現已封裝的一個 Href 方法,可將 URL 轉換為在請求客戶端可用的 URL。根據此寫法,我們就可添加自己的方法,如以下是我封裝一個動態獲取國際化資源文件的方法,這樣就可直接在JS里使用.NET的資源文件進行國際化了:

public class HtmlTemplateBase : TemplateBase { //手工調用資源文件管理器 private static ResourceManager resources = (ResourceManager)System.Type.GetType  ("RazorJS.Resource").GetProperty("ResourceManager").GetValue(null, null);  public HtmlTemplateBase() {  Url = new UrlHelper(HttpContext.Current.Request.RequestContext); } public string Href(string originalUrl) {  return Extensions.ResolveUrl(originalUrl); }  public string GetLangText(string langKey) {  根據key返回相關的語言  return resources.GetString(langKey); }  public UrlHelper Url { get; set; } }

然后在JS里直接調用即可:

var s = '@GetLangText("CoderBlog")';console.log(s);

運行完后,就可直接在JS里輸入 CoderBlog 這個key的內容啦

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴彦县| 安阳县| 德钦县| 汝州市| 廊坊市| 深泽县| 清远市| 邻水| 苍梧县| 安化县| 宣城市| 哈巴河县| 长乐市| 大姚县| 二连浩特市| 南部县| 太康县| 无极县| 集贤县| 孝感市| 图木舒克市| 常山县| 东莞市| 江安县| 合江县| 大荔县| 岑巩县| 阳山县| 黄石市| 萝北县| 沧州市| 崇文区| 读书| 台中县| 紫阳县| 大冶市| 丹寨县| 都安| 安泽县| 桦南县| 岳西县|