Должен ли контроллер 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();  
    }

}