List string in 2 MVC tables

Asked

Viewed 61 times

0

I have 3 models: Pessoa, Catequizando and Inscricao. I intend to make a query that returns the name of the person where CatequizandoID = PessoaID that will appear in a dropdown view CriarInscricao

I tried to use this on the Registration controller but always returns null:

public ActionResult CriarInscricao() 
{ 
    var queryCatequizandos = from p in db.Pessoa 
                             join c in db.Catequizando on p.PessoaID equals c.CatequizandoID 
                             select new { p.Nome, p.PessoaID }; 

    ViewBag.CatequizandoID = new SelectList(db.Pessoa, "PessoaID", "Nome");         
    return View(); 
}

namespace WebAppCatechesis2.Models {
    public partial class Pessoa {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public Pessoa()
        {
            // uma PESSOA pode ser referenciada como mais do que uma catequese
            // uma PESSOA pode ser referenciada como mais do que uma PARTICIPACAOEMEVENTOS
            //
            this.Catequese = new HashSet<Catequese>();
            this.ParticipacaoEmEventos = new HashSet<Participacao>();
            Pais = new HashSet<Catequizando>();
            Maes = new HashSet<Catequizando>();
            EncarregadosEducacao = new HashSet<Catequizando>();


        }
        //chave primaria
        [Key]
        //[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PessoaID { get; set; }

        //[Required(ErrorMessage = "Insira o nome da Pessoa")]
        //[MinLength(3, ErrorMessage = "No minimo o nome da Pessoa tem que ter 3 caracteres")]
        //[MaxLength(60, ErrorMessage = "Campo Pessoa com um máximo de 60 caracteres")]
        //[RegularExpression("[A-Z][a-zãéêíúóá]+(( ){1,3}[A-Z][a-zãéêíúóá]+)*", ErrorMessage = "Deve escrever o nome da Pessoa, começando cada palavra por maiúscula, este campo não aceita digitos numéricos")]
        [Display(Name = "Nome da Pessoa")]
        public String Nome { get; set; }

        //[Required(ErrorMessage = "Insira a Morada")]
        //[MinLength(3, ErrorMessage = "No minimo a morada tem que ter 3 caracteres")]
        //[MaxLength(100, ErrorMessage = "Morada com um maximo de 100 caracteres")]
        [Display(Name = "Morada")]
        public String Morada { get; set; }

        //[RegularExpression(@"^[A-Za-zãéêíúóá]+$", ErrorMessage = "Este campo só aceita caracteres alfabéticos")]
        //[MaxLength(30, ErrorMessage = "No maximo a Localidade tem que ter 30 caracteres")]
        //[MinLength(3, ErrorMessage = "No minimo a Localidade tem que ter 3 caracteres")]
        //[Required(ErrorMessage = "Insira a Localidade")]
        [Display(Name = "Localidade")]
        public String Localidade { get; set; }

        //[RegularExpression("[0-9]{7}", ErrorMessage = "O Código Postal só aceita digitos numéricos. Deve escrever 7 digitos.")]
        //[Required(ErrorMessage = "Insira o Código Postal")]
        [Display(Name = "Código Postal")]
        public String CodPostal { get; set; }


        //[RegularExpression("[0-9]{9}", ErrorMessage = "O contacto telefónico só aceita digitos numéricos. Deve escrever 9 digitos.")]
        //[Required(ErrorMessage = "Insira o contacto telefónico")]
        [Display(Name = "Número de Telemóvel")]
        public String Telemovel { get; set; }


        //[RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z",
        //ErrorMessage = "Insira um endereço de email válido")]
        //[Required(ErrorMessage = "Campo Email obrigatório")]
        [Display(Name = "Email")]
        public String Email { get; set; }

        //[Required(ErrorMessage = "Escolha o género")]
        [UIHint("Genero")]
        public Boolean Genero { get; set; }

        //[RegularExpression(@"^[A-Za-zãéêíúóá]+$", ErrorMessage = "Este campo só aceita caracteres alfabéticos")]
        //[MinLength(5, ErrorMessage = "Naturalidade com minimo de 5 caracteres")]
        //[MaxLength(30, ErrorMessage = "Naturalidade com maximo de 30 caracteres")]
        //[Required(ErrorMessage = "Insira a naturalidade")]
        [Display(Name = "Naturalidade")]
        public String Naturalidade { get; set; }

        //[RegularExpression(@"^[A-Za-zãéêíúóá]+$", ErrorMessage = "Este campo só aceita caracteres alfabéticos")]
        //[MinLength(5, ErrorMessage = "Nacionalidade com minimo de 5 caracteres")]
        //[MaxLength(30, ErrorMessage = "Nacionalidade de 30 caracteres")]
        //[Required(ErrorMessage = "Insira a naturalidade")]
        [Display(Name = "Nacionalidade")]
        public String Nacionalidade { get; set; }

        //[RegularExpression("[0-9]{8}", ErrorMessage = "O BI só aceita digitos numéricos. Deve escrever 8 digitos.")]
        //[Required(ErrorMessage = "Insira o número do BI")]
        [Display(Name = "Nº BI")]
        public String BI { get; set; }

        //[RegularExpression("[0-9]{9}", ErrorMessage = "O NIF só aceita digitos numéricos. Deve escrever 9 digitos.")]
        //[Required(ErrorMessage = "Insira o número do NIF")]
        [Display(Name = "NIF")]
        public String NIF { get; set; }

        //[Required(ErrorMessage = "Escolha o estado civil")]
        [Display(Name = "Estado Civil")]
        public String Estado_Civil { get; set; }

        //[RegularExpression(@"^[A-Za-zãéêíúóá]+$", ErrorMessage = "Este campo só aceita caracteres alfabéticos")]
        //[MinLength(5, ErrorMessage = "Profissão com minimo de 3 caracteres")]
        //[MaxLength(30, ErrorMessage = "Profissão de 30 caracteres")]
        //[Required(ErrorMessage = "Insira a profissão")]
        [Display(Name = "Profissão")]
        public String Profissao { get; set; }


        //[Required(ErrorMessage = "Escolha o estado civil")]
        [Display(Name = "Habilitações Literárias")]
        public String Habilitacoes_Literarias { get; set; }


        //[Required(ErrorMessage = "Escolha a data de nascimento")]
        [Display(Name = "Data de Nascimento")]
        public String DataNascimento { get; set; }

        public String Foto { get; set; }

        //[MaxLength(500, ErrorMessage = "Este campo só perminte um máximo de 500 caracteres")]
        [Display(Name = "Observações")]
        public virtual String Observacoes { get; set; }


        // Uma PESSOA pode ser um CATEQUISTA e um CATEQUIZANDO
        public virtual Catequista Catequista { get; set; }
        public virtual Catequizando Catequizando { get; set; }




        //lista as eventuais referencias a uma PESSOA como PAI 
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Catequizando> Pais { get; set; }

        //lista as eventuais referencas a uma PESSOA como MAE
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Catequizando> Maes { get; set; }

        //lista as eventuais referencas a uma PESSOA como Encarregado de educacao
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Catequizando> EncarregadosEducacao { get; set; }
        public virtual ICollection<Catequese> Catequese { get; set; }
        public virtual ICollection<Participacao> ParticipacaoEmEventos { get; set; }
    }
} 

namespace WebAppCatechesis2.Models {
    public partial class Catequizando {

        public Catequizando()
        {
            this.Avaliacao = new HashSet<Avaliacao>();
            this.Inscricao = new HashSet<Inscricao>();
            this.Eventos = new HashSet<Evento>();
        }

        //chave primária e forasteira
        [Key, ForeignKey("Pessoa")]
        public int CatequizandoID { get; set; }

        //[MinLength(3, ErrorMessage = "Mínimo de 3 caracteres")]
        //[MaxLength(30, ErrorMessage = "Máximo de 30 caracteres")]
        //[Required(ErrorMessage = "Insira o nome da escola")]
        [Display(Name = "Nome Escola")]
        public String NomeEscola { get; set; }

        //[Required(ErrorMessage = "Insira o ano escolar")]
        [Display(Name = "Ano Escolar")]
        public String AnoEscolar { get; set; }


        //[Required(ErrorMessage = "Insira a turma escolar")]
        [Display(Name = "Turma escolar")]
        public String TurmaEscolar { get; set; }

        //[MinLength(3, ErrorMessage = "Mínimo de 3 caracteres")]
        //[MaxLength(30, ErrorMessage = "Máximo de 30 caracteres")]
        //[Required(ErrorMessage = "Preencha este campo")]
        [Display(Name = "Cédula Cristã")]
        public String CedulaCrista { get; set; }


        // FK para a tabela PESSOA a referenciar um PAI, MAR, ENC DE EDUCACAO.
        // preenchimento NÃO obrigatório
        public int? Pai { get; set; }
        public int? Mae { get; set; }
        public int? EncEducacao { get; set; }

        //referencia os dados particulares deste CATEQUIZANDO, descritos no obj PESSOA
        public virtual Pessoa Pessoa { get; set; }
        //referencia o obj PAI
        public virtual Pessoa MeuPai { get; set; }
        //referencia o obj MAE
        public virtual Pessoa MinhaMae { get; set; }
        //referencia o obj ENC DE EDUCACAO
        public virtual Pessoa MeuEncEducacao { get; set; }

        public virtual ICollection<Evento> Eventos { get; set; }
        public virtual ICollection<Avaliacao> Avaliacao { get; set; }
        public virtual ICollection<Inscricao> Inscricao { get; set; }
    }
}


namespace WebAppCatechesis2.Models {
    public partial class Inscricao {
        public Inscricao()
        {
            this.Grupo = new HashSet<Grupo>();
        }
        //chave primária
        public int InscricaoID { get; set; }

        //chave forasteira

        //[MinLength(1, ErrorMessage = "Minimo de 1 caracteres")]
        //[MaxLength(15, ErrorMessage = "Máximo de 15 caracteres")] 
        //[Required(ErrorMessage = "Insira o ano pastoral")]
        [Display(Name = "Ano Pastoral")]
        public String AnoPastoral { get; set; }

        //[MinLength(1, ErrorMessage = "Minimo de 1 caracteres")]
        //[MaxLength(50, ErrorMessage = "Máximo de 50 caracteres")]   
        //[Required(ErrorMessage = "Insira o ano catequese")]
        //[Display(Name = "Ano Catequese")]
        public String AnoCatequese { get; set; }

        //[MinLength(3, ErrorMessage = "Minimo de 3 caracteres")]
        //[MaxLength(50, ErrorMessage = "Máximo de 50 caracteres")]  
        //[Required(ErrorMessage = "Insira o horário preferencial")]
        [Display(Name = "Horário Preferencial")]
        public String Horario_Preferencial { get; set; }

        //[Required(ErrorMessage = "Insira a data de inscrição")]
        [Display(Name = "Data de Inscrição")]
        public String Data_Inscricao { get; set; }

        //[MinLength(1, ErrorMessage = "Minimo de 1 caracteres")]
        //[MaxLength(30, ErrorMessage = "Máximo de 30 caracteres")]  
        //[Required(ErrorMessage = "Insira a taxa de isncrição")]
        [Display(Name = "Taxa de Inscrição")]
        public String Taxa_Inscricao { get; set; }

        //[MinLength(5, ErrorMessage = "Minimo de 5 caracteres")]
        //[MaxLength(30, ErrorMessage = "Máximo de 30 caracteres")]  
        //[Required(ErrorMessage = "Seguro")]
        [Display(Name = "Seguro")]
        public String Seguro { get; set; }

        //[Required(ErrorMessage = "Pagamento")]
        [Display(Name = "Pago")]
        public Boolean Pago { get; set; }

        //[MinLength(3, ErrorMessage = "Minimo de 3 caracteres")]
        //[MaxLength(30, ErrorMessage = "Máximo de 30 caracteres")] 
        [Display(Name = "Donativo")]
        public String Donativo { get; set; }

        //[MaxLength(500, ErrorMessage = "Este campo só perminte um máximo de 500 caracteres")]
        public String Observacoes { get; set; }


        public int CatequizandoID { get; set; }
        [ForeignKey("CatequizandoID")]
        public virtual Catequizando Catequizando { get; set; }

        //define a ligação a tabela Catequese 1:N
        public int CatequeseID { get; set; }
        [ForeignKey("CatequeseID")]

        public virtual Catequese Catequese { get; set; }
        public virtual ICollection<Grupo> Grupo { get; set; }
    }      
}

View:

<div class="form-group"> 
    @Html.LabelFor(model => model.CatequizandoID, "Catequizando", htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-3"> 
        @Html.DropDownList("CatequizandoID", null, "--Escolha um Catequizando--", htmlAttributes: new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.CatequizandoID, "", new { @class = "text-danger" }) 
    </div> 
</div>

1 answer

0

Wickedone, I have some structures like this in my applications. Are you handling a Creation View right? This is relatively simple because we just need to show a name to choose and write the ID to the database. The select you made there is returning the data in the list? Put breakpoint in select to see if the list is returning null before or if the problem is in the selectlist, for example:

Here:

var queryCatequizandos = from p in db.Pessoa 
join c in db.Catequizando on p.PessoaID equals c.CatequizandoID 
select new { p.Nome, p.PessoaID };

In my structure I use so:

No Controller:

 var lista = db.Cliente.Where(c => c.Ativo == true).ToList();
    return query.ToList();

    ViewBag.Id_Cliente = new SelectList(lista, "Id", "Fantasia");

Na View:

<div class="form-group col-sm-4">
   @Html.LabelFor(model => model.IdCliente, "Cliente", htmlAttributes: new { @class = "control-label col-md-2" })
   @Html.DropDownList("IdCliente", null, "", htmlAttributes: new { @class = "form-control" })
   @Html.ValidationMessageFor(model => model.IdCliente, "", new { @class = "text-danger" })
</div>

Before we know what is going wrong, we need to know if your list is returning null or if the problem is going to view. Hugs.

  • @Wickedone was able to test my suggestion?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.