文檔目錄css
本節內容:html
ABP提供了一個易用的方式,在你的web應用裏嵌入Razor視圖(.cshtml文件)和其它資源(css,js,img...文件).你可使用這個功能建立包含UI功能的插件/模塊.json
首先,咱們應當建立一個文件並把它標誌爲嵌入式資源,任何程序集均可以包含嵌入式資源文件.步驟依項目類型而變.app
假設咱們有個名爲EmbeddedPlugIn的項目:ui
把Views文件夾的全部文件標誌爲嵌入式資源,咱們能夠添加一個以下配置到project.json:spa
"buildOptions": { "embed": { "include": [ "Views/**/*.*" ] } }
假設咱們有個名爲EmbeddedPlugIn的項目:
我選中Index.cshtml文件,轉到屬性窗口(快捷鍵爲F4)並修改它的"建立操做"爲"嵌入式資源":
你應當在你的一個web應用裏,爲全部你想作爲嵌入式資源的文件的建立操做.
咱們一旦把文件嵌入到程序集裏,咱們可使用啓動配置把它們添加到嵌入式資源管理器,添加以下一行代碼到你模塊的PreInitialize方法裏:
Configuration.EmbeddedResources.Sources.Add( new EmbeddedResourceSet( "/Views/", Assembly.GetExecutingAssembly(), "EmbeddedPlugIn.Views" ) );
讓咱們解釋一下參數:
對於.cshtml文件,直接從一個控制器的Action裏返回.EmbeddedPlugIn程序集裏的BlogController以下所示:
using Abp.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc; namespace EmbeddedPlugIn.Controllers { public class BlogController : AbpController { public ActionResult Index() { return View(); } } }
如你所見,定與一般的controller同樣,如預期地工做.
爲使用嵌入式資源(js,css,img...),咱們只要在咱們的視圖中如常地使用它們:
@section Styles { <link href="~/Views/Blog/Index.css" rel="stylesheet" /> } @section Scripts { <script src="~/Views/Blog/Index.js"></script> } <h2 id="BlogTitle">Blog plugin!</h2>
我假設主應用包含Styles和Scripts節.咱們也能夠如常地使用其它文件(如img).
ASP.NET MVC 5.x 項目將經過Owin自動集成嵌入式資源管理器(只要你的啓動文件如預期的包含app.UseAbp()),對於ASP.NET Core項目,咱們應當手動添加app.UseEmbeddedFiles()到啓動類裏,並在app.UseStaticFiles()以後:
app.UseStaticFiles(); app.UseEmbeddedFiles(); //Allows to expose embedded files to the web!
經過,嵌入式資源管理器裏的全部靜態文件可直接被客戶端使用,不過出於安全或其它意圖,你能夠忽略一些文件擴展名,.cshtml和.config默認狀況下被忽略(防止從客戶端直接訪問).你能夠在你模塊的PreInitialize裏添加更多擴展名:
Configuration.Modules.AbpWebCommon().EmbeddedResources.IgnoredFileExtensions.Add("exe");
嵌入式資源文件的一個重要功能是:它們可被更高層的模塊重寫,這意味着你能夠在你web應用的相同文件夾裏建立一個與嵌入式文件同名的文件(web應用中你的文件不要求是嵌入式的資源,由於靜態文件比嵌入式文件優先級更高).所以,你能夠在應用裏重寫模塊的css,js或view文件,一樣地,若是模塊A依賴於模塊B,且模塊A使用相同路徑定義了一個嵌入式資源,它就會重寫一個模塊B的嵌入式資源.
注意:對於ASP.NET Core 項目,你應當把重寫文件做爲根目錄的wwwroot文件夾下.