Должен ли контроллер MVC и View иметь отношения от 1 до 1?
В настоящее время я использую asp.NET MVC для создания частей системы управления контентом на веб-сайте и имею одиозную работу по воссозданию всех моих представлений как частичных представлений, поскольку они, по-видимому, нарушают работу карты сайта.
Например, мой FAQAdminController имеет Views: Index, AddFAQ, EditFAQ, ConfirmDeleteFAQ, и они должны быть частичными.
Мне сказали, что каждый контроллер должен иметь один вид и все другие формы или действия, которые заканчиваются отображаемым содержимым страницы, должны быть реализованы как частичные представления.
Я проверил перед публикацией, и никакая документация, статьи, вики и вопросы SO не дают мне прямого ответа относительно того, не имеет ли множественные представления на контроллер прерывания модели MVC.
Строго, должен ли MVC-контроллер и представление иметь отношение 1 к 1?
Ответы
Ответ 1
Мне сказали, что каждый контроллер должен иметь один вид и все другие формы или действия, которые заканчиваются отображаемым содержимым страницы, должны быть реализованы как частичные представления.
Эта глупость.
Строго, должен ли MVC-контроллер и представление иметь отношение 1 к 1?
Абсолютно нет. Создавайте приложение логичным и последовательным способом.
Контроллер обычно обрабатывает много действий и возвращает много разных представлений. Вы можете подумать о том, чтобы с помощью FAQController отображать все представления как для пользователя, так и для администратора.
Ответ 2
Я думаю, что это побеждает цель MVC. Поскольку контроллер должен иметь возможность решить, какой вид использовать для представления модели.
Ответ 3
MVC Controller должен иметь возможность поддерживать более одного представления.
Ответ 4
Контроллеры MVC могут и должны поддерживать несколько видов. Полезно, чтобы представления, поддерживаемые одним контроллером, относятся к одному бизнес-объекту или процессу.
Рассмотрим пример ниже
public class ExampleController : Controller
{
public ActionResult Index()
{
//get list of objects
return View(); // uses a view called Index
}
public ActionResult Edit(string id)
{
Object target = ObjectManager.GetObject(id);
if (target == null)
{
return New();//view for creating a record
}
else
{
ViewData.Add("detail", target);
return View("Detail");//using a view not name-mapped to controller method name
}
}
public ActionResult New()
{
return View();
}
}