How to set upload a photo as required

1

I'm developing a page, so job seekers can enter and fill in their personal information, one of these information is the photo, which has to be mandatory.

Then 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; }
}

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);
        }
    }

So I would like to know how to pass the chosen fact to the model variable?

    
asked by anonymous 20.08.2018 / 18:14

1 answer

1

Your view model is not getting a byte[] photo but a HttpPostedFileBase , you can store it as you are doing, but for validation you need to take the required attribute of the photo and declare your 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" })
}

On 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;
        }
    }
    //...
}
    
21.08.2018 / 16:34