В папке представления «Сотрудники» находятся следующие файлы. :
Код: Выделить всё
~/View/Employee/Index.cshtml
~/View/Employee/PageNotFound.cshtml
~/View/Employee/Test.cshtml
Код: Выделить всё
~/View/Student/Index.cshtml
~/View/Student/PageNotFound.cshtml
~/View/Student/Test.cshtml
~/View/Student/About/Index.cshtml
Поэтому мне нужен способ загрузить любое представление в любую подпапку ~Views/Student в StudentController. Я нашел ряд статей, в которых описывается, как это можно сделать. Я обнаружил, что представлению не нужен конкретный контроллер, когда нашел этот код:
Код: Выделить всё
protected override void HandleUnknownAction(string actionName)
{
try
{
this.View(actionName).ExecuteResult(this.ControllerContext);
}
catch (InvalidOperationException )
{
Response.Redirect("~/Student/PageNotFound");
}
}
Проблемы начинаются при попытке отобразить представления в подпапках, например https://localhost:44367/Student/About/Index.cshtml.
Эта статья здесь Могу ли я указать собственное местоположение для «поиска представлений» в ASP.NET MVC? решает эту ситуацию, поэтому я попробовал:
Код: Выделить всё
System.Web.Mvc.RazorViewEngine rve = (RazorViewEngine)ViewEngines.Engines
.Where(e => e.GetType() == typeof(RazorViewEngine))
.FirstOrDefault();
string[] additionalPartialViewLocations = new[]
{
"~/Views/Student/About/{0}.cshtml"
};
if (rve != null)
{
rve.PartialViewLocationFormats = rve.PartialViewLocationFormats
.Union(additionalPartialViewLocations)
.ToArray();
rve.ViewLocationFormats = rve.ViewLocationFormats
.Union(additionalPartialViewLocations)
.ToArray();
}
Я отладил HandleUnknownAction() и заметил, что { строковый параметр actionName для этого URL-адреса равен About, думаю, я ожидал, что это будет Index.
Тогда я подумал, что могу изменить маршрутизацию и придумал это в RouteConfig.cs:
Код: Выделить всё
routes.MapRoute(
name: "Student",
url: "Student/{*url}",
defaults: new { controller = "Student", action = "Index" }
);
Мне кажется, что это противоречит всей цели ASP.NET MVC.
Значит, это проблема маршрутизации? Нужен ли мне собственный RazorViewEngine? Мы ожидаем, что будет много файлов .cshtml, сгруппированных в подпапки в папках представлений «Студент» и «Сотрудник», мне нужно как-то загрузить эти представления. Небезосновательно ожидать чего-то вроде ~Views/Student/About/Subfolder1/Subfolder2/Applying.cshtml
Будем благодарны за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/789 ... subfolders
Мобильная версия