Марк,
Во-первых: я думаю, что вы ищете RenderPartialFor<TViewModel>
. Это должно работать, даже на главных страницах.
Второе: позвольте мне разрешить путаницу между RenderPartial*
и Partial
.
Это известная проблема, которая вызывает путаницу среди людей. RenderPartial довольно сильно отличается от Partial. Я знаю, что это сбивает с толку, извините. Мы планируем исправить это в ближайшее время, в преддверии FubuMVC 1.0.
RenderPartial не выполняет цепочку поведения / действие. Это очень похоже на работу UserControls в ASP.NET WebForms. Это простой рендеринг UserControl.
Однако, Partial выполняет «частичный вызов» цепочки поведения / действия. Это позволяет вам вызывать другое действие в контексте текущего действия. Так как это частичный вызов, не все поведения выполняются. Например, если у вас был TransactionalBehavior, который управлял транзакцией БД в течение срока действия HTTP-запроса, а затем вы вызывали Partial () цепочки поведения, он не порождает новую транзакцию БД.
Поведения кодируются с осознанием того, что они решают, целесообразно ли им выполнять во время частичного вызова.
Таким образом, вам нужно решить, хотите ли вы простой контент, используя RenderPartial
(например, простой заголовок / нижний колонтитул или повторно используемый фрагмент статического HTML), или вам нужно выполнить некоторую логику в действии, чтобы создать связанную модель к частичному виду, используя метод Partial
.
В случае Partial
он все равно будет использовать ASPX в качестве своего представления, за исключением того, что ASPX не должен иметь полный HTML (например, без тега begin или тега body), поскольку он всегда будет загружаться в середина большего HTML-документа из другого представления. Частичный ASPX обычно не должен использовать главные страницы и т. Д.
Любое действие может быть вызвано через Partial
и идентифицируется его входной моделью или лямдой, отражающей его ControllerType.ActionMethod. Тем не менее, я рекомендую вам не выполнять никаких старых действий с использованием Partial
, но есть действия, которые должны вызываться частично.
По умолчанию все действия будут получать маршрут через FubuMVC. Для частичных действий вы можете не захотеть, чтобы они были маршрутизируемыми (то есть они могут только вызываться в контексте другого действия на стороне сервера). Чтобы обозначить это, вам нужно применить соглашение, чтобы Fubu знал, что не нужно направлять эти действия. По умолчанию FubuMVC имеет встроенное соглашение, согласно которому не следует направлять какие-либо действия с атрибутом [FubuPartial]
. У вас нет , чтобы использовать это соглашение, если вы не хотите, но это удобно, поскольку оно встроено автоматически для вас.
Причина, по которой вам может потребоваться частичное действие с маршрутом, заключается в том, что вы хотите использовать метод jJuery $ .load () AJAX для загрузки частичного содержимого HTML на сервер из веб-браузера (то есть что-то меняется на странице). и вы хотите обновить контент с сервера без перезагрузки всей страницы / экрана).