asp.net mvc — представления и контроллеры

Как контроллеры узнают, какие представления возвращать? Я думал, что это связано с соглашением об именах, но я видел случаи, например, в приложении Nerd Dinner, где имена не совпадают. Где или как я могу увидеть это сопоставление? Спасибо.


person Crios    schedule 06.08.2009    source источник


Ответы (3)


public class EmployeesController
{
    public ViewResult Index()
    {
        return View("CustomerName");
    }
}

Будет искать:

Views/Employees/CustomerName.aspx
Views/Employees/CustomerName.ascx
Views/Shared/CustomerName.aspx
Views/Shared/CustomerName.ascx

Вот примерно так..

Когда вы просто возвращаете View(); без указания имени он искал представление с тем же именем, что и действие контроллера. В этом случае Index.aspx

person Thomas Stock    schedule 06.08.2009
comment
Параметр, который вы передаете View(), означает ли это имя, которое он будет искать? Кроме того, есть ли способ указать контроллеру искать представление в определенной области? - person Crios; 06.08.2009
comment
Параметр - это имя представления, например. ИмяКлиента = ИмяКлиента.aspx. Насколько я знаю, места, в которые смотрит mvc, жестко закодированы, но вы можете настроить их, разработав ViewEngine. ViewEngines.Engines.Add(новый MyCusyomViewEngine()); //Global.asax.cs - person Nick Clarke; 06.08.2009
comment
местоположения действительно жестко запрограммированы с помощью механизма просмотра по умолчанию. И параметр действительно является именем представления. Рекомендуется всегда указывать имя представления, потому что таким образом вы можете выполнить его модульное тестирование. - person Thomas Stock; 06.08.2009
comment
Возможно, вы захотите исправить свой код. Необходимо вернуть View(CustomerName); Минор, я знаю! :) - person Dan Atkinson; 06.08.2009

Существует три способа указать имя представления.

По соглашению

public ActionResult MyAction {
  return View()
}

Это будет искать представление с именем метода действия, также известное как «MyAction.ascx» или «MyAction.aspx».

** По имени **

public ActionResult MyAction {
  return View("MyViewName")
}

Это будет искать представление с именем «MyViewName.ascx» или «MyViewName.aspx».

** По пути приложения **

public ActionResult MyAction {
  return View("~/AnyFolder/MyViewName.ascx")
}

Этот последний смотрит только в этом одном месте, указанном вами месте.

person Haacked    schedule 08.08.2009

Он основан на имени действия в контроллере. Вот пример:

У меня есть контроллер с именем UserController.

Одно из моих действий на этом контроллере называется Index.

Когда я говорю return View();

Он будет искать в каталоге Views, в папке User, Index.aspx или Index.ascx.

Он также будет искать в общей папке.

person Mark Sherretta    schedule 06.08.2009