How to set a photo upload as a must

Asked

Viewed 65 times

1

I am developing a page, for job applicants can enter and fill your personal information, one of these information is the photo, which has to be mandatory.

So I created the following model:

{
    .
    .
    [Display(Name = "SolidWorks")]
    public int infSolid { get; set; }
    [StringLength(500)]
    [Display(Name = "Outros")]
    public string infOutro { get; set; }
    [Required]
    public byte[] foto { get; set; }
    public int atualizar {get;set;}
    [StringLength(200)]
    [Required]
    [DataType(DataType.Date)]
    [Display(Name = "Emissão RG")]
    public string emissaoRg { get; set; }
}

Where did I define how [Required] the variable foto, but when I make the way POST, is returned that the model is not validated:

View:

 @using (Html.BeginForm("IndexRecru", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    @Html.HiddenFor(model => model.id)
    @Html.HiddenFor(model => model.foto);

    <div class="jumbotron">
        <h2>Bem Vindo ao OneeWeb - Recrutamento</h2>
        <p>@Session["razao_social"]</p>
        <div class="posPerfil">
            @if (imagePath != "")
            {
                <img src="@imagePath" class="fotoPerfil" alt="Foto Perfil" title="Foto Perfil">
            }
            else
            {
                <img src="~/Imagens/fotoPerfil.png" class="fotoPerfil" alt="Foto Perfil" title="Foto Perfil">
            }

            @if (imagePath == "")
            {                   
                @Html.TextBoxFor(model => model.foto, new { type = "file", name = "foto", id = "foto", accept="image/jpeg" })
                <br />
                @Html.ValidationMessageFor(model => model.foto, "", new { @class = "text-danger" })
           }
        </div>
    </div>
}

Controller:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult IndexRecru(HttpPostedFileBase foto, [Bind(Include = "id,nome,sobreNome,telefone,celular,sexo,recado,email,nascimento,idade,ultimoEmpregoNome,ultimoEmpregoSuperior,ultimoEmpregoTel,ultimoEmpregoRamal,ultimoEmpregoAdmissao,ultimoEmpregoDemissao,ultimoEmpregoCargo,ultimoEmpregoSalario,ultimoEmpregoFuncao,ultimoEmpregoMotivo,PenultimoEmpregoNome,PenultimoEmpregoSuperior,PenultimoEmpregoTel,PenultimoEmpregoRamal,PenultimoEmpregoAdmissao,PenultimoEmpregoDemissao,PenultimoEmpregoCargo,PenultimoEmpregoSalario,PenultimoEmpregoFuncao,PenultimoEmpregoMotivo,pertenceClube,passatempoFavorito,tipoResidencia,fumante,alergico,alergicoQual,cirurgia,cirurgiaQual,pressaoAlta,diabete,coluna,tendinite,paisPressaoAlta,paisDiabete,paisColuna,paisTendinite,indicaPessoaNome1,indicaPessoaTel1,indicaPessoaNome2,indicaPessoaTel2,obs,candidatoEng,candidatoComercial,candidatoCompras,candidatoProd,candidatoTI,candidatoRH,candidatoPCP,candidatoFinanceiro,candidatoQualidade,candidatoSGQ,candidatoMan,estadoCivil,nomeConj,idadeConj,temFilhos,qntFilhos,rg,cpf,ctps,serieCtps,cnh,categoria,disSM,nomeMae,idadeMae,trabalhaMae,profissaoMae,nomePai,idadePai,trabalhaPai,profissaoPai,endereco,numero,bairro,cidade,estado,cep,escolaridadeSup,escolaridadeSupSemestre,escolaridadeSupInstituicao,escolaridadeSupConclusao,escolaridadeMed,escolaridadeMedSemestre,escolaridadeMedInstituicao,escolaridadeMedConclusao,escolaridadeFund,escolaridadeFundSemestre,escolaridadeFundInstituicao,escolaridadeFundConclusao,idiomaIngles,idiomaEspanhol,idiomaAlemao,idiomaOutro,infAutoCad,infOffice,infSolid,infOutro,foto,atualizar,emissaoRg")] Models.Brayton.Recrutamento recrutamento)
    {
        Contextos.OneeWeb_BraytonContext db = new Contextos.OneeWeb_BraytonContext();

        if (foto != null)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                foto.InputStream.CopyTo(ms);
                byte[] array = ms.GetBuffer();

                recrutamento.foto = array;
            }
        }

        if (ModelState.IsValid)
        {
            recrutamento.atualizar = 1;

            db.Entry(recrutamento).State = System.Data.Entity.EntityState.Modified;
            db.SaveChanges();

            if (Session.Keys.Count == 0)
                return RedirectToAction("Login", "Account");
            else
                return RedirectToAction("Conclusao", "Recrutamento");
        }
        else
        {
            if (Session.Keys.Count == 0)
                return RedirectToAction("Login", "Account");
            else
                return View(recrutamento);
        }
    }

Then I would like to know how to pass the chosen suit to the variable model?

1 answer

1

Your view model is not receiving one byte[] photo and yes a HttpPostedFileBase, you can store it as you are doing but for validation you need to take the required from the photo attribute and declare its upload.

In your Viewmodel

{
    //...
    [DataType(DataType.Upload)]
    [Required]
    HttpPostedFileBase FotoUpload { get; set; }

    public byte[] foto { get; set; }
    //...
}

In your View

@if (imagePath == "")
{                   
    @Html.TextBoxFor(model => model.foto, new { type = "file", name = "FotoUpload", id = "foto", accept="image/jpeg" })
    <br />
    @Html.ValidationMessageFor(model => model.FotoUpload, "", new { @class = "text-danger" })
}

In your Controller

public ActionResult IndexRecru(HttpPostedFileBase FotoUpload, [Bind(Include = "id,nome,...")] Models.Brayton.Recrutamento recrutamento)
{
    Contextos.OneeWeb_BraytonContext db = new Contextos.OneeWeb_BraytonContext();

    if (FotoUpload != null)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            FotoUpload.InputStream.CopyTo(ms);
            byte[] array = ms.GetBuffer();

            recrutamento.foto = array;
        }
    }
    //...
}

Browser other questions tagged

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