Когда целесообразно использовать Html.RenderAction ()? - PullRequest
3 голосов
/ 24 февраля 2010

Я немного не уверен, когда уместно использовать Html.RenderAction() для отображения моих видов, а когда нет. Насколько я понимаю, поскольку он не является «официальным» компонентом ASP.NET MVC, его использование является плохой практикой, и его первоначальное намерение заключалось в использовании многократно используемых виджетов, которых нет ни в одном конкретном контексте контроллера.

Дело в том, что RenderAction очень полезен, когда мне нужен компонент, который существует под другим Контроллером, нежели тот, для которого я в данный момент рендеринга. Я думаю, что это очень аккуратный и автономный способ визуализации компонентов, которые полагаются на данные, недоступные в текущем представлении. Моему представлению не нужно указывать модель, как если бы я использовал RenderPartial()

Это плохая практика? Есть ли лучший способ?

Ответы [ 4 ]

4 голосов
/ 24 февраля 2010

Это нормально, если это решит вашу проблему.

3 голосов
/ 24 февраля 2010

Я думаю, что это очень аккуратный и автономный способ визуализации компонентов, которые полагаются на данные, недоступные в текущем представлении. Моему представлению не нужно указывать модель, как если бы я использовал RenderPartial ()

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

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

2 голосов
/ 24 февраля 2010

Я использую Html.RenderAction() по указанным вами причинам, чтобы вам не приходилось предоставлять одни и те же данные снова и снова для каждого отдельного представления, которое должно отображать информацию о пользователе (например). Вы можете утверждать, что это нарушает шаблон mvc, поскольку представление теперь знает о контроллере. Но я думаю, что преимущества в этом сценарии перевешивают это, и ваше приложение будет более сухим.

Я просто использую его для всего, что мне нужно повторно использовать во многих разных местах (например, пользовательские данные, которые я отображаю на каждой странице с моей главной страницы), и я не хочу отправлять эту информацию явно каждому представлению. Если я не ошибаюсь, я думаю, что они также включили его в asp.net mvc 2, так что теперь это часть фреймворка.

1 голос
/ 16 декабря 2010

Я нашел вескую причину использовать Html.RenderAction в сценарии, основанном на результатах модели родительского представления. Например, модель родительского представления имела свойство List, которое должно было отображаться в таблице. Однако для предотвращения условного IF / ELSE в родительском представлении я вызываю Html.RenderAction (). Действие принимает в списке и проверяет счет. Если счетчик равен нулю, он возвращает представление «нет результатов»; в противном случае он возвращает представление, которое обрабатывает элементы в списке в форме своей собственной модели. Это чище, предотвращая вставку логики в представление. Я также могу повторно использовать представление «без результатов» для других областей моего приложения.

...