[英]How to override a nopcommerce view file with a view file inside the plugin?
[英]override view from plugin NopCommerce 4.3
我想覆蓋運輸方式頁面的視圖。 我嘗試了所有變體,但沒有任何效果。 請幫幫我。 預先感謝
要覆蓋 NopCommerce 中的視圖,您首先需要將要更改的.cshtml文件復制到插件中並進行修改。 不要忘記將此文件設置為 Content 並將Copy to Output Directory屬性設置為 Copy if Newer 或 Copy Always。
之后,您還必須在插件中實現IViewLocationExpander接口。 它應該看起來像這樣。
public class MyViewLocationExpander : IViewLocationExpander
{
public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
{
if(context.ViewName == "ViewToOverwrite")
{
viewLocations = new[] { "PathToMyCustomView" }.Concat(viewLocations);
}
return viewLocations;
}
public void PopulateValues(ViewLocationExpanderContext context)
{
return;
}
}
最后一步是為插件注冊您的自定義視圖擴展器。 您可以通過在插件中實現INopStartup接口來做到這一點。 它應該看起來像這樣。
public class MyStartup : INopStartup
{
public int Order => int.MaxValue;
public void Configure(IApplicationBuilder application)
{
}
public void ConfigureServices(IServiceCollection services, IConfiguration configuration)
{
services.Configure<RazorViewEngineOptions>(options =>
{
options.ViewLocationExpanders.Add(new MyViewLocationExpander());
});
}
}
很簡單,在你的插件中實現 ViewLocaionExpander。 這將覆蓋您的視圖,它將從插件的視圖中呈現
嗨,我使用類似的解決方案來解決這個問題。 在您的 RouteProvider.cs
public partial class RouteProvider : IRouteProvider
{
public void RegisterRoutes(IEndpointRouteBuilder endpointRouteBuilder)
{
endpointRouteBuilder.MapControllerRoute("RedirectPdfPackagingSlip",
"Admin/yourController/yourAction",
new { controller = "Order", action = "PdfPackagingSlip" });
}
}
並將 go 恢復為可以在 controller 中使用的原始方法
if (order.ShippingRateComputationMethodSystemName != "your shipping method SystemName")
return Redirect("~/Admin/Order/PdfPackagingSlip?shipmentId=" + ShipmentId);
我希望這有幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.