发布时,ViewModel属性始终为null

时间:2013-12-17 18:07:09

标签: asp.net-mvc-4 razor

我有以下ViewModel

    public class EditPatientViewModel
{
    public Domain.Entities.Patient patient;
    public IEnumerable<Espece> Especes;
    public IEnumerable<Client> Clients;

}

以下控制器

        public ViewResult Edit(int Id_pat)
    {
        var ViewModel = new EditPatientViewModel();
        ViewModel.patient = patientRepo.GetPatientById(Id_pat);
        ViewModel.Especes = especeRepo.Especes;

        return View(ViewModel);
    }

    [HttpPost]
    public ActionResult Edit(EditPatientViewModel editPatientViewModel)
    {
        if (ModelState.IsValid)
        {
            patientRepo.Save(editPatientViewModel.patient);
            TempData["message"] = "Sauvé";
            return RedirectToAction("Index");
        }
        else
        {
            return View(editPatientViewModel);
        }
    }

以及以下视图

    @model Veto.Models.ViewModels.EditPatientViewModel

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>


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

    <div class="form-horizontal">
        <h4>Edit Patient</h4>
        <hr />
        @Html.ValidationSummary(true)
        <div class="form-group">
            <div class="col-md-10">
                @Html.HiddenFor(m => m.patient.Id_pat)
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-10">
                @Html.EditorFor(m => m.patient.Nom_pat)
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

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

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

每次提交表单时,ViewModel发布的不是null,而是属性..我想检索属性以进行更新。

为什么呢? TX,

1 个答案:

答案 0 :(得分:1)

一小时内两个相同的problem :)

将ViewModel更改为:

public class EditPatientViewModel
{
    public Domain.Entities.Patient patient { get; set; }
    public IEnumerable<Espece> Especes { get; set; }
    public IEnumerable<Client> Clients { get; set; }
}

在复杂类型中,mvc model binder搜索不属于成员变量的属性。