Campos (automaricos) recebem valor null após o Edit ...

17/03/2016

0

Boa tarde,

Estou iniciando agora e estou com algumas dificuldades, no meu banco de dados tenho alguns campos que não são inseridos pelo usuário, como o Status, por exemplo, e quando eu vou editar algum registro o conteúdo da coluna Status como nulo...

Esse é o código da action editar...
 public ActionResult Editar(long id)
        {
            Funcionarios funcionario = db.Funcionarios.Find(id);

            ViewBag.IDArea = new SelectList(db.Areas, "IDArea", "Nome");
            ViewBag.IDCargo = new SelectList(db.Cargos, "IDCargo", "Nome");
            ViewBag.IDEmpregador = new SelectList(db.Empregadores, "IDEmpregador", "Nome");

            return View(funcionario);
        }

        [HttpPost]
        public ActionResult Editar(Funcionarios funcionario)
        {
            if (ModelState.IsValid)
            {
                funcionario.UltimaAtualizacao = DateTime.Now;

                db.Entry(funcionario).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(funcionario);

        }


Acho que se eu tivesse uma coluna onde eu guardasse a data de cadastro do funcionários ela tbm receberia o valor nulo após a execução do comando.

Eu poderia passar novamente o valor do Status aqui (funcionario.StatusFunc = "Ativo"), mas acho q isso é meio que gambiarra...

Eu tenho que falar quais campos podem ser alterados, como no update do sql? como eu faço isso?

Essa é a minha view de edição...
@model AppFuncionarios.Models.Funcionarios

@{
    ViewBag.Title = "Editar";
}

<h2>Editar</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Funcionarios</legend>

        @Html.HiddenFor(model=> model.IDFuncionario)

        <div class="editor-label">
            @Html.LabelFor(model => model.Nome)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nome)
            @Html.ValidationMessageFor(model => model.Nome)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Registro)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Registro)
            @Html.ValidationMessageFor(model => model.Registro)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Ramal)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Ramal)
            @Html.ValidationMessageFor(model => model.Ramal)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DTNasc)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DTNasc)
            @Html.ValidationMessageFor(model => model.DTNasc)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IDArea)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDArea")
            @Html.ValidationMessageFor(model => model.IDArea)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IDCargo)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDCargo")
            @Html.ValidationMessageFor(model => model.IDCargo)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IDEmpregador)
        </div>
        <div class="editor-field">
            @Html.DropDownList("IDEmpregador")
            @Html.ValidationMessageFor(model => model.IDEmpregador)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DTAdmissao)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DTAdmissao)
            @Html.ValidationMessageFor(model => model.DTAdmissao)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.HrEntra)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.HrEntra)
            @Html.ValidationMessageFor(model => model.HrEntra)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Hrsai)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Hrsai)
            @Html.ValidationMessageFor(model => model.Hrsai)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.DataDesligamento)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DataDesligamento)
            @Html.ValidationMessageFor(model => model.DataDesligamento)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.TipoFunc)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.TipoFunc)
            @Html.ValidationMessageFor(model => model.TipoFunc)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CPF)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CPF)
            @Html.ValidationMessageFor(model => model.CPF)
        </div>

        <p>
            <input type="submit" value="Salvar" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>


Eu tirei o trecho referente ao Status, pois esse campo só é alterado
<div class="editor-label">
@Html.LabelFor(model => model.StatusFunc)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.StatusFunc)
@Html.ValidationMessageFor(model => model.StatusFunc)
</div>

Qual é forma correta para eu fazer o update no banco de dados sem sobrescrever o valor dos campos que não foram passados?

Alguém poderia me ajudar?

Obrigado.
Ricardo

Ricardo

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar