#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 instartup.cs
file?2. @r08 — Для ASP.NET Версия MVC CORE 3.1 обновление выглядит по-другому. Смотрите исправления выше.