I have 3 templates: Pessoa
, Catequizando
and Inscricao
. I want to make a query that returns the Name of the person where CatequizandoID = PessoaID
that will appear in a dropdown in the view CriarInscricao
I tried to use this in the Inscription controller but it 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>