Каков правильный шаблон проектирования для пользовательских типов шаблонов в ASP.NET MVC? - PullRequest
0 голосов
/ 03 апреля 2012

Вот моя ситуация: у меня есть несколько специализированных типов объектов в моем приложении, и я следую стандартному соглашению для отображения их с помощью пользовательских шаблонов в папке /Shared/DisplayTemplates и редактирования их с помощью шаблонов в /Shared/EditorTemplates. Но я также хочу иметь возможность отображать пользовательский шаблон фильтра для каждого типа, поэтому я хотел бы добавить папку /Shared/FilterTemplates и реализовать свой собственный метод @Html.FilterFor, чтобы показ шаблона фильтра был точно таким же, как показ Показать или редактор шаблонов.

Похоже, это лучший способ справиться с этой ситуацией, или есть более правильный / элегантный способ сделать это в MVC? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Я всегда использую EditorTemplates, когда данные отправляются обратно на сервер. Я предполагаю, что пользователь может отправить фильтр на сервер для выполнения фактической фильтрации.

При создании фильтров я предпочитаю создавать модель для фильтра, например:

public class UserListFilterModel
{
    public string Username { get; set; }
    public bool IsEnabled { get; set; }
}

Представление для UserListFilterModel переходит в EditorTemplates / UserListFilterModel.ascx.

А затем добавьте его в качестве свойства в мою модель представления для страницы.

public class MyPageViewModel
{
    public UserListFilterModel Filter { get; set; }
}

Затем я добавляю модель фильтра в модель для страницы и отображаю ее так:

<%= Html.EditorFor(x => x.Filter)%>

Вы, вероятно, оборачиваете фильтр в форму, чтобы позволить пользователю отправлять значения, поэтому я думаю, что он принадлежит EditorTemplates. Пользователи фактически редактируют модель фильтра.

(Если вы действительно хотите разделить их, вы можете использовать UIHintAttribute , но я бы не стал)

Редактировать: я добавил пример кода.

0 голосов
/ 03 апреля 2012

Я думаю, вы неправильно понимаете, как работают шаблоны. Шаблоны не имеют смысла в контексте, который вы описываете.

Шаблоны работают с элементом данных SINGLE (хотя этот элемент данных может содержать несколько элементов данных, которые, в свою очередь, имеют свои собственные шаблоны).

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

Что вы можете сделать, это создать DisplayTemplate для вашего класса коллекции, который добавляет фильтрацию, поэтому нет необходимости создавать пользовательский тип шаблона. Просто используйте DisplayTemplates.

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