Передача данных в пользовательский элемент управления ASP.NET MVC - PullRequest
1 голос
/ 20 декабря 2010

У меня есть пользовательский элемент управления, который показывает список последних объявлений. Этот пользовательский элемент управления будет использоваться почти на 90% моих страниц. Теперь меня интересует, как передать данные в этот пользовательский элемент управления для последних объявлений.

Мой первый подход заключается в создании базового контроллера, и в методе Initialise я передаю данные в пользовательский элемент управления через ViewBag / ViewData. Все мои другие контроллеры происходят от этого базового контроллера. Это выглядит хорошо, но я обеспокоен тем, что это может стать излишним для какого-то простого решения, уже существующего там. Также мне нужно убедиться, что ни один контроллер никогда не возится с моими данными Viewdata / Viewbag, предназначенными для моего usercontrol.

Пожалуйста, дайте мне знать, если это правильный путь продвижения вперед или существует какое-то лучшее решение.

Спасибо

Ответы [ 4 ]

0 голосов
/ 21 декабря 2010

Я думаю, что лучшим способом было бы использование @ Html.Action.Это позволило бы мне вызывать свои действия, посвященные моим данным usercontrols, и я могу вызывать их из любого места.

0 голосов
/ 20 декабря 2010

Предполагая, что у вас есть «пользовательский элемент управления» (вы должны попытаться ссылаться на них как на частичное представление в MVC), который выглядит следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Announcement>>" %>

Это означает, что ваше частичное представление ожидает список Объявления объектов.

Теперь вопрос - где вы отображаете этот частичный вид ?

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

В любом случае код для визуализации части должен выглядеть следующим образом:

<% Html.RenderPartial("LatestAnnouncements", announcements) %>

Но - откуда вы получаете объявления.

Предполагая, что у вас есть метод Repository / DAL / helper для получения последних объявлений - я думаю, что вы должны иметь ViewModel, который вам требуется унаследовать от базовой ViewModel:

public class AnnouncementViewModelBase
{
   protected IEnumerable<Announcement> GetAnnouncements()
   {
       // call DAL
   }
} 

Тогда любой мастер / представление / частичное, которому необходимо отобразить последние частичные объявления, должно быть привязано к ViewModel, которая наследуется от этой базовой модели представления.

В случаях, когда мастер / представление / частичное не является строго типизированным (например, динамическое представление), вы можете вставить его в ViewData. Но если вы правильно организовали свое мнение, этого не требуется.

0 голосов
/ 20 декабря 2010

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

0 голосов
/ 20 декабря 2010
...