从控制器返回视图模型的操作加载视图时清空字段

时间:2018-06-07 14:58:59

标签: c# asp.net-mvc

我正在尝试编辑记录,但是在渲染视图时,数据未显示(所有字段都为空)。我调试了视图模型,我可以看到数据正确加载。

这是我的代码:

编辑操作:

 public ActionResult Edit(Guid? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var clienteViewModel = GetClienteViewModel(db.Clientes.Find(id));
        if (clienteViewModel == null)
        {
            return HttpNotFound();
        }

        return View(clienteViewModel);
    }

修改视图

@model Poo3.ViewModels.ClienteViewModel

<h2>Edit</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>@Model.PessoaFisica.CPF</h4>
        <hr />

        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.PessoaFisica.Nome, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PessoaFisica.Nome, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.PessoaFisica.Nome, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PessoaFisica.DataNascimento, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PessoaFisica.DataNascimento, new { htmlAttributes = new { @class = "form-control datepicker" } })
                @Html.ValidationMessageFor(model => model.PessoaFisica.DataNascimento, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PessoaFisica.CPF, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PessoaFisica.CPF, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.PessoaFisica.CPF, "", new { @class = "text-danger" })
            </div>
        </div>


        <div class="form-group">
            @Html.LabelFor(model => model.PessoaFisica.Pessoa.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.PessoaFisica.Pessoa.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Email, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.PessoaFisica.Pessoa.Ativo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="checkbox">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Ativo)
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Ativo, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
        <div class="form-horizontal">
            <h4>Endereço</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Logradouro, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Logradouro, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Logradouro, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Numero, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Numero, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Numero, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Complemento, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Complemento, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Complemento, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Bairro, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Bairro, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Bairro, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.CEP, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.CEP, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.CEP, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Cidade, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Cidade, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Cidade, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.PessoaFisica.Pessoa.Endereco.Estado, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.PessoaFisica.Pessoa.Endereco.Estado, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.PessoaFisica.Pessoa.Endereco.Estado, "", new { @class = "text-danger" })
                </div>
            </div>
        </div>
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Save" class="btn btn-default" />
        </div>
    </div>
}

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

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

谢谢大家

1 个答案:

答案 0 :(得分:0)

我发现了错误,我必须包含所有导航

 public ActionResult Edit(Guid? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Cliente cliente = db.Clientes.Include(x => x.PessoaFisica).Include(x => x.PessoaFisica.Pessoa).Include(x=> x.PessoaFisica.Pessoa.Endereco).FirstOrDefault(x=>x.Id == id);
        if (cliente == null)
        {
            return HttpNotFound();
        }
        return View(cliente);
    }