[MVC] передать данные из одного контроллера во вью другого?
От: shedon Россия http://it2read.ru
Дата: 17.01.11 19:31
Оценка:
Сорри за сумбурно сформулированный вопрос, постараюсь описать проблем более понятно.
На сайте (asp.net / mvc) есть мастер пэйдж у которого есть Menu.ascx — как следует из названия отрисовывает меню сайта. Суть меню — список категорий сайта, которые можно выбрать. Для меню есть отдельный контроллер. Который просто выбирает из БД все категории. Ниже приведен исходный код вью и контроллера.
Menu.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ICollection<ICategory>>"%>
<div class="contain-25 clear">
    <div class="lvl-nav clear">
        <ul class="nav-pri clear">
<%--класс on - означает что данное меню выбрано и подсвечивается--%>
            <li class="on">
                <a rel="home" href="<%= Url.Content("~") %>">Все</a>
            </li>
            <%
            foreach (ICategory category in Model)
            {
            %>
                <li class="">
                        <%= Html.ActionLink(category.Name, "Category", "Story", 
                            new { name = category.UniqueName }, new { rel = "tag directory" })%>
                </li>
            <%
            }
            %>
        </ul>
    </div>
</div>


Контроллер:

    public class CategoryController : BaseController
    {
        private readonly ICategoryRepository _categoryRepository;

        public CategoryController(ICategoryRepository categoryRepository)
        {
            Check.Argument.IsNotNull(categoryRepository, "categoryRepository");

            _categoryRepository = categoryRepository;
        }

        private ICollection<ICategory> Categories
        {
            get { return _categoryRepository.FindAll(); }
        }

        [ValidateInput(false)]
        [ChildActionOnly]
        public ActionResult Menu()
        {
            return View(Categories);
        }

        [ChildActionOnly]
        public ActionResult RadioButtonList()
        {
            return View(Categories);
        }
    }


Соответственно, есть контент-страницы, у которых еcть свои контроллеры.
Вот код контроллера отрабатывающего выбор категории

        [Compress]
        public ActionResult Category(string name, int? page)
        {
            name = name.NullSafe();

            if (string.IsNullOrEmpty(name))
            {
                return RedirectToRoute("Published");
            }

            ICategory category = _categoryRepository.FindByUniqueName(name);

            if (category == null)
            {
                ThrowNotFound("Категория не существует.");
            }

            StoryListViewData viewData = CreateStoryListViewData<StoryListViewData>(page);
            string uniqueName = name;
            string titleName = name;
            string subtitle = name;
            string metaDescription = null;

            if (category != null)
            {
                PagedResult<IStory> pagedResult = _storyRepository.FindPublishedByCategory(category.Id, PageCalculator.StartIndex(page, Settings.HtmlStoryPerPage), Settings.HtmlStoryPerPage);
                viewData.Stories = pagedResult.Result;
                viewData.TotalStoryCount = pagedResult.Total;

                name = category.Name;
                uniqueName = category.UniqueName;
                titleName = category.TitleName;
                metaDescription = category.MetaDescription;

                subtitle = "Новости {0}".FormatWith(titleName.ToLower());
            }

            viewData.Subtitle = subtitle;
            return View("List", viewData);
        }


Так вот мне в Menu.ascx надо получить текущую выбранную категорию, чтобы подсветить нужную кнопку в меню.
Как мне передать эти данные из контроллера категории в Menu.ascx ?
mvc
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.