2016-04-09 4 views
0

Я новичок в программировании ASP MVC и хочу спросить, как настроен маршрут.Конфигурация по умолчанию для маршрута ASP MVC

Например, у меня есть домашний контроллер

public ActionResult Home(){ 
    return View("Index") 
} 

Найдет Index.cshtml в/Views/Home/

Однако, если переименовать домашнюю папку для Homees, например, вид не найден, а также я пытаюсь вернуть View с View ("~/Views/Homees/Index.cshtml") Это не значит, что контроллер не нашел вид.

Является ли это значением asp mvc по умолчанию? и это можно изменить?

+0

Можете ли вы указать, что это ошибка? – dotnetstep

ответ

1

Есть несколько пунктов.

  1. ASP.net MVC основан на конвенции. Он также указан @Petar Minev. Когда дело доходит до поиска, используйте следующий метод. Он принимает имя контроллера как имя каталога и имя файла имени имени с разным расширением (например, cshtml, vbhtml, aspx) на основе механизма просмотра. (Поскольку вы используете cshtml, кажется, что вы используете механизм просмотра Razor и Webform).

Для поиска сначала перейдите в каталог с именем контроллера и выполните поиск указанного вида. Если он недоступен, он переходит в общую папку.

Выше по умолчанию используется поведение ASP.net MVC.

  1. Теперь вы меняете имя папки, а затем первое решение, которое вы пробовали, которое должно работать так, как оно работает для меня. (Убедитесь, что имя вашей папки верное. Убедитесь, что вы не переименовали каталог области).

    public ActionResult Home(){ 
        return View("~/Views/Homees/Index.cshtml") 
    } 
    
  2. Другим решением является переименовать контроллер с HomeesController (так он будет автоматически находить правильный каталог)

  3. Если вы по-прежнему с этой конвенцией другой папки, как, как вы добавить «Ес «в« Доме »лучше добавить это соглашение в поиск по умолчанию для просмотра. (Вы можете сделать это, либо наследовать от RazorViewEngine по умолчанию или параметра RazorViewEngine изменения)

Например

protected void Application_Start() 
     { 
      RazorViewEngine engine = (RazorViewEngine)ViewEngines.Engines[1]; 
      List<string> currentFormats = engine.ViewLocationFormats.ToList(); 
      currentFormats.Insert(0,"~/Views/{1}es/{0}.cshtml"); 
      engine.ViewLocationFormats = currentFormats.ToArray(); 
      ... Other application start code 
     } 
0

по По умолчанию Microsoft в ASP.NET MVC создается по одной конвенции Folder, что означает, что все файлы, которые будут контроллеры должны быть в папке контроллера, каждый файл, который будет вид должен быть под видом папки,

также, если вы создаете Mvc Route, например MyProfile, в MVC вы получите contorller с этим именем и папкой в ​​представлении.

Все это контролируется маршрутизацией по умолчанию, которая знает, где искать, представления и контроллеры, поэтому, если вы хотите внести некоторые изменения или изменения, вы должны перейти на веб-сайт ASP.NET и посмотреть несколько руководств для маршрутизации MVC

Надеюсь, что я помог :)

1

Razor View - двигатель по умолчанию для ASP.Net MVC. Этот механизм просмотра Razor настроен на поиск пути по указанному пути, то есть «~/Views/{1}/{0} .cshtml». Здесь {1} placeholder указывает имя контроллера и {0} представляет имя представления.

Скажем, для примера любой запрос на действие индекса в домашнем контроллере будет искать вид в «~/Views/Home/Index.cshtml».

Теперь, если вы хотите изменить этот путь по умолчанию, вам необходимо определить настраиваемый механизм просмотра. Здесь пример примера, как вы можете определить настраиваемый механизм просмотра и изменить путь по умолчанию.

public class MyCustomViewEngine : RazorViewEngine 
{ 

    public MyCustomViewEngine() 
    {   

     ViewLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml" }; 

     MasterLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml"}; 

     PartialViewLocationFormats = new string[] { 
      "~/MyViews/{1}/{0}.cshtml", 
      "~/MyViews/Shared/{0}.cshtml"}; 

     FileExtensions = new string[] { "cshtml" }; 
    } 
} 

Вам также необходимо зарегистрировать настраиваемый механизм просмотра с временем выполнения ASP.Net в приложении _Start().

 ViewEngines.Engines.Clear(); 
     ViewEngines.Engines.Add(new MyCustomViewEngine()); 
1

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

public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View("~/Views/Homees/index.cshtml"); 
     } 
     public ActionResult Contact() 
     { 
      return View(); 
     } 
    } 

вы просто использовали имя контроллера в качестве имени действия по умолчанию в целях в папке есть отдельная папка для каждого контроллера, как для контроллера Home, будет папка с именем Home, а внутри нее будет отдельный файл cshtml для каждого результата действия, например, для моего кода есть два имени результата действия Index и Contact поэтому под Home папкой будет два отдельных cshtml для обоих как index.cshtml и contact.cshtml.Поэтому, когда мы запрашиваем действие index, он пойдет для index.cshtml и для Contact действия contact.cshtml по умолчанию, но мы можем расположить наш собственный вид для любого действия, например, моего index, и он отлично работает, ваш подход был правильным, но проблема была только в имени контроллера и название действия, я думаю, попробуйте таким образом, это может помочь

0

Простой доступ к App_Start и Open RouteConfig.cs Файл и изменение контроллера маршрута «Домой» на «Домашний» по умолчанию он устанавливается как «Главная». Если вы переименуете HomeController в «HomeesController», вы должны поменять на rountconfig маршрут по умолчанию. проверьте ниже изображения

enter image description here

После этого откройте "HomeesController" из папки контроллера здесь вы можете добавить действие для просмотра

public ActionResult Index() 
{ 
    return View(); 
} 

enter image description here

и Add Action для просмотра "Homees" Папка

enter image description here

Смежные вопросы