Как создать динамические, множественные частичные представления, используя шаблон репозитория в MVC

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

Например, пользователь может выбрать Кентукки из меню, а идентификатор для Кентукки равен 1. Контроллер дома получает идентификатор (1) и определяет возможные модули для этого состояния (простой вызов БД.) Возможно, есть модуль объявлений и модуль контактов для гос. Модуль объявлений может содержать несколько элементов, ноТолько один модуль. Там будет частичное представление для каждого типа модуля.

Вот основные настройки, которые у меня есть.

public interface IModuleRepository
{
    IList GetMenuItemModules(int menuItem);
    IList GetAnnouncements(int modID);
    IList GetNews(int modID);
    IList GetContacts(int modID);
}



//business object
public class MenuItemModule
{

    private int _MenuItemID;
    private int _ModuleID;
    private int _ModuleDefID;
    private string _Src;
    private int _ModuleOrder;

//get, set properties for these...

}

//announcements entity
public class Announcements
{
    private int _ID = -1;
    private int _MenuItemID = -1;
    private int _ModuleID = -1;
    private string _Description = string.Empty;

//get set props ...
}

В моем домашнем контроллере ...

public class HomeController : Controller
{


    private IModuleRepository modRepository;

    public HomeController(IModuleRepository modRepository)
    {
        this.modRepository = modRepository;
    }


    public ViewResult Item(string ItemID)
    {

        //returns a list of menuitemmodules for the page.  This gives me the Src or name of each
        //module on the page, i.e. Announcements, news, contacts, etc. 
        var modules = modRepository.GetMenuItemModules(Convert.ToInt32(ItemID)); 


        return View(modules);

   }

}

Я пробовал несколько разных моделей, чтобы вернуться, но я всегда сталкиваюсь с некоторыми противоречиями. Если я передаю menuitemmodules в мой Item.aspx, то я могу сделать что-то вроде этого:

   foreach (var mod in Model)           
   {               
        Html.RenderPartial(mod.Src, a);      //needs an announcement object though    
   } 

Это делает его несколько динамичным, потому что у меня есть Src, который в основном был бы чем-то вродеОбъявления» и я могу просто создать частичную анонсы для обработки модуля. Но мне было трудно передать мой модуль меню и объект объявлений.

Я также возился с передачей более сложного объекта, а затем тестировал каждый Src, который проходит с помощью оператора If. Это усложнит масштабирование в будущем, так как я увеличу количество возможных модулей в приложении.

Как я могу решить мою проблему? Я надеюсь, что предоставил достаточно информации. Мне нравится основная идея здесь -http://www.mikesdotnetting.com/Article/105/ASP.NET-MVC-Partial-Views-and-Strongly-Typed-Custom-ViewModels но это, кажется, работает только для статических модулей на странице.

Я попробовал модель составного представления под названием ModuleViewModel. Вот эта попытка:

public class ModuleViewModel
{
    public IList announcements { get; set; }
    public IList mods { get; set; }

}

Если я передам эту модель в Item.aspx, я могу сделать что-то вроде этого (но я должен делать что-то не так, потому что что-то не такне выглядишь правильно.)

   foreach (var mod in Model)           
   {

       if (mod.announcements.Count > 0)
       {
           Html.RenderPartial("Announcements", mod.announcements);
       }


   } 

Еще раз, масштабируемость будет преследовать меня. Я хотел бы иметь что-то вроде этого на странице товара:

   foreach (var mod in Model)           
   {

           Html.RenderPartial(mod.Src, mod);          

   } 

Это будет правильный частичный вид и передать ему правильную модель.

Ответы на вопрос(2)

Ваш ответ на вопрос