Как изменить или настроить каталог для просмотра страниц razor cshtml

#c# #asp.net #asp.net-mvc #asp.net-core #razor

#c# #asp.net #asp.net-mvc #asp.net-core #razor

Вопрос:

Я попытался обновить путь к страницам просмотра Razor cshtml, но он не работает.Чтобы обновить расположение страниц просмотра, я попробовал, например, Startup.cs

 public void ConfigureServices(IServiceCollection services)
{
    var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions
    {
        EnableQuickPulseMetricStream = true
    };
    services.AddMvc();//.WithRazorPagesRoot("/Home/myapp");
    //services.Configure<RazorPagesOptions>(options => options.RootDirectory = "/Home/myapp");
    services.AddApplicationInsightsTelemetry(aiOptions);
    services.AddCors(option =>
    {
        option.AddPolicy("AllowSpecificOrigin", policy => policy.WithOrigins("*"));
        option.AddPolicy("AllowGetMethod", policy => policy.WithMethods("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
    });
}
  

Контроллер:

 public class HomeController : Controller
{
}
  

Текущий путь к страницам просмотра

 Views/Home/Index.cshtml
  Views/Home/AppHome.cshtml
  

Хотите изменить путь просмотра примерно так

 Views/Home/myapp/Index.cshtml
 Views/Home/myapp/AppHome.cshtml
  

Но не после настройки службы, это не работает.Как изменить каталог страниц просмотра?

Спасибо.

Комментарии:

1. Вы можете использовать функциональные папки, это позволит вам настроить расположение просмотра: github.com/OdeToCode/AddFeatureFolders

Ответ №1:

ASP.NET Рамки

Чтобы изменить расположение поиска в представлении, необходимо создать новый класс, производный от RazorViewEngine и изменить значения для одного или нескольких из следующих свойств:

  • ViewLocationFormats
  • MasterLocationFormats
  • PartialViewLocationFormats

Каждое из этих свойств представляет собой массив строк, которые выражаются с использованием нотации форматирования составной строки. Для ViewLocationFormats свойства значения по умолчанию:

 ~/Views/{1}/{0}.cshtml,
~/Views/{1}/{0}.vbhtml,
~/Views/Shared/{0}.cshtml,
~/Views/Shared/{0}.vbhtml
  

Ниже приведены значения параметров, которые соответствуют заполнителям:

  • {0} представляет имя представления.
  • {1} представляет имя контроллера.

В следующем примере показано, как изменить местоположения представления, требуемые выше:

 public class CustomLocationViewEngine : RazorViewEngine
{
    public CustomLocationViewEngine()
    {
        ViewLocationFormats = new string[] 
        {                
            "~/Views/{1}/myapp/{0}.cshtml",
            "~/Views/{1}/{0}.cshtml"
        };
    }
}
  

Следующим шагом будет регистрация CustomLocationViewEngine с использованием ViewEngines.Engines коллекции в Application_Start методе Global.asax :

 protected void Application_Start()
{
    for (var i = ViewEngines.Engines.Count - 1; i >= 0; i--)
    {
        if (ViewEngines.Engines[i] is System.Web.Mvc.RazorViewEngine)
        {            
            // Remove the current Razor view engine
            ViewEngines.Engines.RemoveAt(i);
            break;
        }
    }    
    // Add the new customized view engine
    ViewEngines.Engines.Add(new CustomLocationViewEngine());

    //…
}
  

ASP.NET ЯДРО 3.1

Для ядра MVC 3.1 ConfigureServices метод в Startup.cs должен быть обновлен, как показано ниже:

 public void ConfigureServices(IServiceCollection services)
{
    services.AddControllersWithViews();
    services.Configure<RazorViewEngineOptions>(o =>
    {
        o.ViewLocationFormats.Clear();
        o.ViewLocationFormats.Add("/Views/{1}/myapp/{0}"   RazorViewEngine.ViewExtension);
        o.ViewLocationFormats.Add("/Views/Shared/myapp/{0}"   RazorViewEngine.ViewExtension);
     });
}
  

Дополнительную информацию см. в разделе RazorViewEngineOptions.Свойство ViewLocationFormats

Комментарии:

1. У меня нет состояния ASP.NET основное приложение, работающее на платформе .NET Framework. (Web api MVC) … .asax в проекте нет файла… могу ли я использовать use in startup.cs file?

2. @r08 — Для ASP.NET Версия MVC CORE 3.1 обновление выглядит по-другому. Смотрите исправления выше.