2 models em uma mesma View do .Net MVC

26/09/2019

13

Tenho 2 tabelas, uma de pessoas e uma de contato.
public partial class PESSOA
    {
        //[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public PESSOA()
        {
            //this.PESSOAS_CONTATOS_CON = new HashSet<PESSOACONTATO>();
        }

       public int IDE_PESSOA { get; set; }
        public string NOM_PESSOA { get; set; }
        public string SIG_FISICA_JURIDICA { get; set; }
        public string NUM_CNPJ { get; set; }
        public string NOM_FANTASIA { get; set; }
        public string NUM_CPF { get; set; }
        public string NUM_RG { get; set; }
        public Nullable<System.DateTime> DAT_NASCIMENTO { get; set; }
        public string LIS_ESTADO_CIVIL { get; set; }
        public string DES_PROFISSAO { get; set; }
        public string STS_PESSOA { get; set; }
        public Nullable<System.DateTime> DAT_INCLUSAO { get; set; }
        public string NOM_LOGIN_INCLUSAO { get; set; }
        public string NUM_IP_INCLUSAO { get; set; }

        public virtual IList<PESSOACONTATO> PESSOAS_CONTATOS_CON { get; set; }

fiz o context e amarrei as tabelas.
    public class Context : DbContext    
    {
        public Context():base("PadraoEntities")
        {
            Database.Log = instrucao => System.Diagnostics.Debug.WriteLine(instrucao);
        }
        public DbSet<PESSOACONTATO>       PESSOACONTATO         { get; set; }
        public DbSet<PESSOA>              PESSOAS               { get; set; }
    }
}

Fiz uma view de create para incluir a pessoa, ao incluir a pessoa mando para a tela de editar passando o id.

No fim da pagina de editar , coloco um botão que vai adicionar os campos dos contatos, porem a pagina de editar não carrega dando erro, na chamada do Model da tabela de contato, sabem o que fiz de errado ou deixei de fazer no meu programa?

--> ele nao reconhece Model.PESSOAS_CONTATOS_CON. e model.PESSOAS_CONTATOS_CON ?


<div class="col-md-12" id="div-contatos">                                       
    @for (int i = 0; i < Model.PESSOAS_CONTATOS_CON.Count;i++)
    {
        <div class="row">
            <div class="col-md-1">
                @Html.HiddenFor(model => model.PESSOAS_CONTATOS_CON[0].IDE_CONTATO_PESSOA, new { @class = "hid-id" })
                @*<input type="number" name="PESSOAS_CONTATOS_CON[0].NUM_DDD" maxlength="2" placeholder="DDD" class="form-control txt-ddd" />*@
                @Html.EditorFor(model => model.PESSOAS_CONTATOS_CON[0].NUM_DDD, new { htmlAttributes = new { @class = "form-control txt-ddd" } })
            </div>

            <div class="col-md-2">
                @*<input type="text" name="PESSOAS_CONTATOS_CON[0].NUM_TELEFONE" placeholder="Número" class="form-control txt-numero" />*@
                @Html.EditorFor(model => model.PESSOAS_CONTATOS_CON[0].NUM_TELEFONE, new { htmlAttributes = new { @class = "form-control txt-numero" } })
            </div>

            <div class="col-md-1">
                @Html.DropDownListFor( model => model.PESSOAS_CONTATOS_CON[0].LIS_TIPO_TELEFONE,
                                          (SelectList)ViewBag.ListaDeTiposDeTelefone,
                                          new { @class = "form-control sel-tipo" })
                @*<select name="PESSOAS_CONTATOS_CON[0].LIS_TIPO_TELEFONE" class="form-control sel-tip o">
                    <option value="0">Residencial</option>
                    <option value="1">Comercial</option>
                    <option value="2">Celular</option>
                    <option value="3">Recado</option>
                </select>*@
            </div>

            <div class="col-md-2">
                @*<input type="text" name="PESSOAS_CONTATOS_CON[0].DES_CONTATO" placeholder="Contato" class="form-control txt-contato" />*@
                @Html.EditorFor(model => model.PESSOAS_CONTATOS_CON[0].DES_CONTATO, new { htmlAttributes = new { @class = "form-control txt-contato" } })
            </div>

            <div class="col-md-2">
                @*<input type="text" name="PESSOAS_CONTATOS_CON[0].DES_EMAIL_CONTATO" placeholder="Email" class="form-control txt-email" />*@
                @Html.EditorFor(model => model.PESSOAS_CONTATOS_CON[0].DES_EMAIL_CONTATO, new { htmlAttributes = new { @class = "form-control txt-email" } })
            </div>

            <div class="col-md-1">
                @Html.DropDownListFor( model => model.PESSOAS_CONTATOS_CON[0].STS_CONTATO,
                                           (SelectList)ViewBag.ListaDeStatus,
                                           new { @class = "form-control sel-status " })
                @*<select name="PESSOAS_CONTATOS_CON[0].STS_CONTATO" class="form-control sel-tipo">
                    <option value="A">ATIVO</option>
                    <option value="I">INATIVO</option>
                </select>*@
            </div>

            <div class="col-md-2">
                <button class="btn btn-danger btn-remover-telefone" data-id="@Model.PESSOAS_CONTATOS_CON[0].IDE_PESSOA">
                    <span class="glyphicon glyphicon-trash"></span>
                </button>
            </div>

        </div>
    }
 </div>
</div>
Responder

Post mais votado

08/10/2019


Cara, usando HTML puro não é uma boa alternativa quando se usa MVC (C#) recomendo usar o cshtml (usa a sintaxe Razor)

ficaria tipo assim:
@using (Html.BeginForm("<Nome da Action>", "<Nome da Controller>", FormMethod.Post, new { enctype = "multipart/form-data }}))
{
  <div>
    @Html.LabelFor(model => model.Endereco, htmlAttributes: new { @class = "control-label" })
    @Html.EditFor(model => model.Endereco, new { htmlAttributes = new { @class = "form-control input" }})
    <!-- E caso queira verificar se o campo foi preenchido acrescenta:
    @Html.ValidationMessageFor(model => model.Endereco, "", new { @class = "text-danger" }) -->
</div>


<div>
    @Html.LabelFor(model => model.EnderecoCobranca, "cobranca", htmlAttributes: new { @class = "control-label input" })
    @{
        var listTu = new List<SelectListItem> {
                            new SelectListItem { Value = "S", Text = "Sim" },
                            new SelectListItem { Value = "N", Text = "Não" },
                    };
    }
    @Html.DropDownListFor(model => model.EnderecoCobranca, new SelectList(listTu, "Value", "Text"), htmlAttributes: new { @class = "form-control input", data_bind = "value: EnderecoCobranca" })
    <!-- @Html.ValidationMessageFor(model => model.EnderecoCobranca, "", new { @class = "text-danger" }) -->
</div>
}
Responder

Mais Posts

Talvez o mais ideal na sua situação seja passar os dados que precisa através do ViewData[""], por exemplo.
Responder

08/10/2019

André Milani

RESOLVI ESSE PROBLEMA COM UM JAVASCRIPT FAZENDO UM BIND.

PORÉM ESTOU COM PROBLEMAS NA PASSAGEM DOS VALORES PARA INCLUSAO DOS DADOS.
Quando envio o valor de uma campo que é select ele passa o valor para ser gravado, porém quando o valor é do tipo text, ele não passa e não grava, saberia me dizer porque ?


' Tipo :<input type="text" name="PESSOAS_ENDERECOS_END[' + qtdEnderecos + ' ].DES_TIPO_ENDERECO" placeholder="Tipo" class="form-control txt-tipo" />' +
' Cobranca :<select name="PESSOAS_ENDERECOS_END[' + qtdEnderecos + '].STS_COBRANCA" placeholder="End.Cobranca" class="form-control sel-cobranca">' +
' <option value="S">SIM</option>' +
' <option value="N">NAO</option>' +
' </select>' +
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira