Как управлять условным отображением частичных представлений в ASP.NET MVC - PullRequest
6 голосов
/ 07 октября 2009

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

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

Я думал об использовании RenderAction и возвращении полностью пустого представления, чтобы предотвратить вывод - это хороший шаблон?

Ответы [ 2 ]

3 голосов
/ 07 октября 2009

нарушает принцип сохранения бизнес-логики вне поля зрения

Это не бизнес-логика. Это логика представления, когда вы определяете, отображать что-то или нет. Это нормально, чтобы иметь его там.

Вы можете принять решение, отображать что-то или нет, и установить несколько флагов в модели (например, вы можете создать BaseModel или MasterModel). Тогда ваши основные представления, сами частичные представления или помощники HTML выполнят условный рендеринг на основе этих флагов.

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

1 голос
/ 22 января 2010

Вы могли бы избежать беспорядочных «If» в представлении, создав метод расширения Html, как упоминалось в моем недавнем посте http://www.rajeeshcv.com/2010/01/asp-net-mvc-conditional-rendering-partial-views/

Спасибо,

Rajeesh

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