我有一个ViewModel(FilialViewModel),它具有PessoaViewModel类型的属性。主视图与FilialViewModel绑定,并且每当我提交时,PessoaViewModel类型的属性为NULL。这是因为当我调用PartialView Person时,我传递了FilialViewModel.PersonaViewModel ...提交时,仅加载了FilialViewModel ...的字段。有人知道如何解决这个问题吗?
public class FilialViewModel
{
[Key]
public int PessoaFilialId { get; set; }
[DisplayName("Tipo de Filial")]
[Required(ErrorMessage = "Escolha um Tipo de Filial")]
public FilialTipo FilialTipo { get; set; }
public PessoaViewModel PessoaViewModel { get; set; }
}
public class PessoaViewModel
{
[Key]
public int Id { get; set; }
[DisplayName("Natureza")]
[Required(ErrorMessage = "Escolha uma Natureza")]
public PessoaNatureza PessoaNatureza { get; set; }
[DisplayName("Natureza")]
}
查看孝顺:
@model Retaguarda.Application.ViewModels.Filial.FilialViewModel
@{
}
<div class="panel">
<div class="panel-body container-fluid pt-5 pl-15 pr-15">
<div class="form-horizontal">
<vc:summary />
@await Html.PartialAsync("~/Views/Pessoa/_Pessoa.cshtml", Model.PessoaViewModel)
</div>
</div>
</div>
查看佩索阿:
@model Retaguarda.Application.ViewModels.Pessoa.PessoaViewModel
@using Retaguarda.Domain.Enuns.Pessoa
@{
ViewData["Title"] = "Pessoa";
}
@Html.HiddenFor(model => model.Id, new { @class = "hidden-id" })
<div class="col-md-2">
<label asp-for="PessoaNatureza" class="control-label">Natureza</label>
<select id="pessoaNatureza" data-modal="" asp-for="PessoaNatureza" asp-items="Model.PessoasNaturezas" title="Selecione uma opção" class="form-control"><option value=""></option></select>
<span asp-validation-for="PessoaNatureza" class="text-danger"></span>
</div>
控制器:
[HttpPost]
[Authorize(Policy = "CanWriteFilialData")]
[Route("filial-gerenciar/cadastrar-novo")]
[ValidateAntiForgeryToken]
public IActionResult Create(FilialViewModel filialViewModel)
{
if (!ModelState.IsValid) return View(filialViewModel);
_filialAppService.Register(filialViewModel);
if (IsValidOperation())
ViewBag.Sucesso = "Filial cadastrada!";
// return Json(new { success = true, message = "Pessoa Excuída!" });
return View(filialViewModel);
}
答案 0 :(得分:0)
对于您的问题,您需要通过FilialViewModel
而不是PessoaViewModel
请按照以下步骤操作:
模型
public class FilialViewModel
{
[Key]
public int PessoaFilialId { get; set; }
public PessoaViewModel PessoaViewModel { get; set; }
}
public class PessoaViewModel
{
[Key]
public int Id { get; set; }
[DisplayName("Natureza")]
[Required(ErrorMessage = "Escolha uma Natureza")]
public string PessoaNatureza { get; set; }
public List<SelectListItem> PessoasNaturezas { get; set; }
}
查看
@model FilialViewModel
@{
}
<div class="panel">
<form method="post">
<div class="panel-body container-fluid pt-5 pl-15 pr-15">
<div class="form-horizontal">
@await Html.PartialAsync("~/Views/Pessoa/_Pessoa.cshtml", Model)
</div>
</div>
<input type="submit" value="Submit"/>
</form>
</div>
部分视图
@model FilialViewModel
@{
ViewData["Title"] = "Pessoa";
}
@Html.HiddenFor(model => model.PessoaViewModel.Id, new { @class = "hidden-id" })
<div class="col-md-2">
<label asp-for="PessoaViewModel.PessoaNatureza" class="control-label">Natureza</label>
<select id="pessoaNatureza" data-modal="" asp-for="@Model.PessoaViewModel.PessoaNatureza" asp-items="@Model.PessoaViewModel.PessoasNaturezas" title="Selecione uma opção" class="form-control"><option value=""></option></select>
<span asp-validation-for="@Model.PessoaViewModel.PessoaNatureza" class="text-danger"></span>
</div>
请注意,对于PessoaNatureza
,您需要定义接受字段而不是像PessoaNatureza
这样的对象的属性。