Переопределить частичный просмотр из плагина NopCommerce 3.90

Я хочу переопределить страницы «_RentalInfo.cshtml» и «_AddToCart.cshtml» из моего плагина. Для этого я создал собственный механизм просмотра и указал путь к файлам в «PartialViewLocationFormats, ViewLocationFormats». //Класс CustomViewEngine

public class CustomViewEngine : ThemeableRazorViewEngine
{
        public CustomViewEngine()
        {
            PartialViewLocationFormats = new[] { "~/Plugins/Misc.Rental/Views/Product/{0}.cshtml" };
            ViewLocationFormats = new[] { "~/Plugins/Misc.Rental/Views/Product/{0}.cshtml" };
         }
}

Затем я создал файл RouteProvider.cs в плагине и добавил свой «CustomViewEngine» в список механизмов просмотра. Я также установил приоритет моего поставщика маршрутов как самый высокий.

//RouteProvider
public partial class RouteProvider : IRouteProvider
{
        #region Fields
        public int Priority
        {
            get
            {
                return int.MaxValue;
            }
        }
        #endregion

        #region Methods
        public void RegisterRoutes(RouteCollection routes)
        {
            ViewEngines.Engines.Add(new CustomViewEngine());

        }
        #endregion
}

Наконец, согласно пути, указанному в моем «CustomViewEngine», я создал страницы «_RentalInfo.cshtml» и «_AddToCart.cshtml» в папке «Views» в моем плагине.

Но тогда по умолчанию отображается только частичный вид NopCommerce по умолчанию. Может ли кто-нибудь просмотреть мой код и сообщить мне, что я сделал неправильно или пропустил, чтобы переопределить частичные представления.


person Mukesh Jain    schedule 09.04.2018    source источник


Ответы (1)


Я использую следующий код в своих плагинах

public PluginRazorViewEngine()
{
    PartialViewLocationFormats = new[] 
    {
        "~/Plugins/My.Plugin/Views/{1}/{0}.cshtml",
        "~/Plugins/My.Plugin/Views/Shared/{0}.cshtml",
    };

    ViewLocationFormats = new[] 
    {
        "~/Plugins/My.Plugin/Views/{1}/{0}.cshtml",
        "~/Plugins/My.Plugin/Views/Shared/{0}.cshtml",
    };

    AreaPartialViewLocationFormats = new[]
    {
        "~/Plugins/My.Plugin/Views/{1}/{0}.cshtml",
        "~/Plugins/My.Plugin/Views/Shared/{0}.cshtml",
    };

    AreaViewLocationFormats = new[]
    {
        "~/Plugins/My.Plugin/Views/{1}/{0}.cshtml",
        "~/Plugins/My.Plugin/Views/Shared/{0}.cshtml",
    };
}


// {0} in format gets filled with view name.
// {1} in format gets filled with controller name.

Я не уверен, какой из них решит вашу проблему.

Просто замените My.Plugin на Misc.Rental, и все будет в порядке.

person Raphael    schedule 10.04.2018
comment
Спасибо за ваш ответ. Я решил свою проблему. Проблема заключалась в моей регистрации Custom View в RouteProvider. \n Я использовал метод Insert вместо Add для регистрации, мне это помогло. ViewEngines.Engines.Insert(0, new CustomViewEngine()); - person Mukesh Jain; 11.04.2018
comment
@Mukesh - если вы все еще сталкиваетесь с проблемой, установите порядок -1 в RouteProvider. - person Raju Paladiya; 26.04.2018