我正在使用 .Net Framework 4.8。我的網路應用程式中需要一個選項,以便能夠為我們擁有的每個客戶覆寫默認視圖(僅 cshtml 檔案)。例如,假設我在檔案夾 views/account/Login.cshtml 中有一個視圖。如果存在于 /Views/Overrides/[MyCustomerName]/Account/Login.cshtml,我想加載自定義版本。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
如果您的每個客戶都安裝了一個單獨的實體(如果我理解正確的話!基本上我建議在 CI/CD 管道中處理這些事情。),您可以這樣做:首先從 RazorViewEngine 創建并派生一個類:
public class MultiImplementationRazorViewEngine : RazorViewEngine
{
private static string _currentImplementation = /*Link to a config file to have your */;
public MultiImplementationRazorViewEngine()
: this(_currentImplementation)
{
}
public MultiImplementationRazorViewEngine(string impl)
{
SetCurrentImplementation(impl);
}
public void SetCurrentImplementation(string impl)
{
if (string.IsNullOrWhiteSpace(impl))
{
this.ViewLocationFormats = new string[] {
@"~/Views/{1}/{0}.cshtml",
@"~/Views/Shared/{0}.cshtml"};
}
else
{
_currentImplementation = impl;
ICollection<string> arViewLocationFormats =
new string[] { "~/Views/Overrides/" impl "/{1}/{0}.cshtml" };
ICollection<string> arBaseViewLocationFormats = new string[] {
@"~/Views/{1}/{0}.cshtml",
@"~/Views/Shared/{0}.cshtml"};
this.ViewLocationFormats = arViewLocationFormats.Concat(arBaseViewLocationFormats).ToArray();
}
}
public static string CurrentImplementation
{
get { return _currentImplementation; }
}
}
然后在 startup.cs 中添加這些行來替換剃須刀引擎:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new MultiImplementationRazorViewEngine());
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537945.html
上一篇:DateTime到一天結束C#
