1
resposta

Binding de uma lista em uma propriedade de objeto

Alguém poderia me ajudar com as tags helps?

Tenho esse formulário, onde as tr's abaixo foram criadas dinamicamente por javascript lá no cliente, e quero "jogar" essa lista de telefones na propriedade Telefones de Contato ao clicar no botão com submit .

@model Contato
<form asp-controller="Contato" asp-action="AdicionaContato" method="post" id="cadastroContato">
<table style="width:100%">
  <tr>
    <th>Tipo </th>
    <th>DDD</th> 
    <th>Número</th>
   <th>Ramal</th>
  </tr>
  <tr>
    <td>Celular</td>
    <td>21</td> 
    <td>98888-6666</td>
   <td></td>
  </tr>
  <tr>
    <td>Fixo</td>
    <td>24</td> 
    <td>2551-8888</td>
    <td>273</td>
  </tr>
</table>
<button type="submit" class="btn btn-primary" id="enviaContato">
</form>

Minhas classes de negócio:

public class Contato
{
    public int Id {get; set;}
    public List<Telefone> Telefones{get;set;}
}
public class Telefone
{
    public int Id{get; set;}
    public string Ddd{get; set;}
    public string Tipo { get; set; }
    public string Ramal {get; set;}

    public string Descricao{get; set;}
}

Controladora:

        public IActionResult AdicionaContato(Contato contato)
        {
            _dataService.AddContato(contato);
           contato.Telefones;//Está nulo!
            return RedirectToAction("Unidade", "Agenda");
        }

Quais modificações devo utilizar nesse html(table e tr) para que contato.Telefones não esteja vazia na controladora?

1 resposta

Olá, Eduardo

Você pode tentar modificar o modelo para incluir 2 campos de telefone. Porém, tem que marcá-los como NotMapped para eles serem ignorados pelo Entity Framework:

public class Contato
{
    public int Id {get; set;}
    public List<Telefone> Telefones {get;set;}

    [NotMapped]
    public string FoneCelular { get; set; }
    [NotMapped]
    public string FoneFixo { get; set; }
}

Em seguida, poderia criar os campos no form usando:

@Html.TextBoxFor(m=>m.FoneCelular)
@Html.TextBoxFor(m=>m.FoneFixo)

Obs.: você verá o uso desse @Html.TextBoxFor nos próximos vídeos do curso.

Porém, ainda teria que resolver o problema de converter as duas propriedades FoneCelular e FoneFixo para a lista Telefones e de volta para as propriedades, sempre que for carregar/gravar os dados.