You need to receive Group and Group Items data when the user gives the Post.
I don’t know if it’s the best, but an alternative (I’ve used several times) to this is you can create a Model (as Grupoviewmodel for example) that will have properties like lists/arrays to receive the Ids of each list of items that your user selected for the Group, in addition to the Group data (with Id, Name...) and the name of the items, etc.
Example of Model:
public class GrupoViewModel
{
private IRepositorioItem _repositorioItem;
public GrupoViewModel(IRepositorioItem repositorioItem)
{
_repositorioItem = repositorioItem;
}
public GrupoViewModel():this()
{
PreencherListaDeGrupoItemA();
PreencherListaDeGrupoItemB();
PreencherListaDeGrupoItemC();
}
//Dados do Grupo
public int ID { get; set; }
public string Nome { get; set; }
//Outros campos do seu model.....
//Lista de Itens
public int[] IdsGrupoItemA { get; set; }
public int[] IdsGrupoItemB { get; set; }
public int[] IdsGrupoItemC { get; set; }
private void PreencherListaDeGrupoItemA()
{
//Código para buscar e preencher os itens IdsGrupoItemA
foreach(var item in _repositorioItem.ObterTodosGrupoItemA())
{
//Preenche os dados desejados como IdsGrupoItemA do item, etc...
}
}
private void PreencherListaDeGrupoItemB()
{
//Código para buscar e preencher os itens IdsGrupoItemB
foreach(var item in _repositorioItem.ObterTodosGrupoItemB())
{
//Preenche os dados desejados como IdsGrupoItemB do item, etc...
}
}
private void PreencherListaDeGrupoItemC()
{
//Código para buscar e preencher os itens IdsGrupoItemC
foreach(var item in _repositorioItem.ObterTodosGrupoItemC())
{
//Preenche os dados desejados como IdsGrupoItemC do item, etc...
}
}
}
In the Controller, in his Action of Get, you create an instance of Grupoviewmodel filling in the information to be submitted (Group data and list of items).
To ride his View (of the kind Grupoviewmodel) use the Item Ids, which will already be filled in, using checkbox (what I normally use) with the same name of the properties for the user to select the desired items.
In the Controller, in his Action Post, you receive the Ids of the items selected by the user, for each Id you retrieve the object (be it Groupoitema, Groupoitemb and/or Groupoitemc) and associate/add in the item list of your Group.
Example Controller:
public class GrupoController
{
public ActionResult Create()
{
return View(new GrupoViewModel());
}
[HttpPost]
public ActionResult Create(GrupoViewModel grupoViewModel)
{
...
List<GrupoItemA> listaItensAselecionados = new List<GrupoItemA>();
foreach(var idGrupoItemA in grupoViewModel.IdsGrupoItemA)
{
//Recupero o objeto GrupoItemA desse Id e adiciono na lista listaItensAselecionados
}
List<GrupoItemB> listaItensBselecionados = new List<GrupoItemB>();
foreach(var idGrupoItemB in grupoViewModel.IdsGrupoItemB)
{
//Recupero o objeto GrupoItemB desse Id e adiciono na lista listaItensBselecionados
}
List<GrupoItemC> listaItensCselecionados = new List<GrupoItemC>();
foreach(var idGrupoItemC in grupoViewModel.IdsGrupoItemC)
{
//Recupero o objeto GrupoItemC desse Id e adiciono na lista listaItensCselecionados
}
...
//Agora com os itens selecionados recuperados você cria o Grupo novo
}
}
I think the ideal would be to use JS to write to HTML. If I have more time I reply later.
– Leonel Sanches da Silva