Совместное использование представлений между различными контроллерами - PullRequest
2 голосов
/ 09 декабря 2008

Является ли хорошей идеей разделять представления между различными контроллерами (используя папку Views / Shared )?

Я создаю свое первое приложение MVC, и для него требуются некоторые данные, которые похожи друг на друга. Они «объясняют» разные вещи (и поэтому будут храниться в разных таблицах), но у каждого из них есть Id, Name и Status. Поэтому я могу использовать разные контроллеры, которые затем используют один и тот же вид для отображения данных в раскрывающемся списке, позволяют пользователю выбрать один для редактирования или добавить новый через текстовое поле.

Очевидно, я теряю возможность строго типизированных данных ViewPage, но кроме того, будет ли это хорошим способом сделать это, или мне лучше создать View для каждого используемого контроллера?

Ответы [ 4 ]

1 голос
/ 09 декабря 2008

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

Определите пользовательский класс для вашей страницы просмотра:

public class MyCustomViewData
{
    public int Id {get; set;}
    public string Name {get; set;}
    public int Status {get; set;}
}

с вашей страницы:

<% Html.RenderPartial("MyCustomView", new MyCustomViewData ()
{
    Id = ViewData.Model.SomeIdField,
    Name = ViewData.Model.SomeNameField,
    Status = ViewData.Model.SomeStatusField
});

или от контроллера

public ActionResult Foo()
{
    // get your model data

    return View("MyCustomView", new MyCustomViewData ()
    {
        Id = model.SomeIdField,
        Name = model.SomeNameField,
        Status = model.SomeStatusField
    });
}
1 голос
/ 09 декабря 2008

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

1 голос
/ 09 декабря 2008

Лично, если представление достаточно универсально, чтобы его можно было использовать для нескольких сценариев, я бы использовал его так. DRY!

0 голосов
/ 11 декабря 2008

Если у вас был общий формат страницы, скажем, таблица, то вы можете создать общий вид в общей папке. Эти ViewData должны содержать информацию о столбцах, а также данные, а также некоторую информацию о любых ссылках.

Детали не сложны, и если бы было много похожих страниц, это сэкономило бы время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...