我是automapper的新手,导航属性映射存在问题。 我已经创建了这样的地图:
CreateMap<ObjEntity, ObjEntityViewModel>()
.ForMember(dest => dest.LabelName,
opts => opts.MapFrom(src => src.IdNavigation.LabelName)).ReverseMap();
它做成一个扁平的物体,并且工作正常。但是,当我从“编辑表单”发回ObjEntityViewModel时,属性“ LabelName”始终为null。从我的html表单发回时,似乎用ForMember定义的所有属性始终为null。 我不明白为什么它为null,如何解决这个问题。
我的控制器代码:
public MesObsIndividusController(IMapper mapper)
{
_mapper = mapper;
}
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return new NotFoundViewResult("NotFound");
}
var mesObsIndividus = await _observationService.GetMesObsindividus(id.Value);
if (mesObsIndividus == null)
{
return new NotFoundViewResult("NotFound");
}
//mapping du ViewModel
var mesVM = _mapper.Map<ObjEntityViewModel>(mesObsIndividus);
return (mesVM);
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, ObjEntityViewModel mesObsIndividus)
{
if (id != mesObsIndividus.IdMes)
{
return new NotFoundViewResult("NotFound");
}
if (ModelState.IsValid){
//do update database stuff
}else
{
return View(mesObsIndividus);
}
return RedirectToAction(nameof(Details), new { id = mesObsIndividus.IdMes });
}
我的html代码:
@model Proj.Models.ObjEntityViewModel
<form asp-action="Edit">
<input type="hidden" asp-for="IdMes" />
<div class="form-group">
<label asp-for="LibEspece" class="control-label"></label>
<input asp-for="LibEspece" id="LbEspece" class="form-control" />
<span asp-validation-for="LibEspece" class="text-danger"></span>
</div>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.LabelName)
</dt>
<dd>
@Html.DisplayFor(model => model.LabelName)
</dd>
</dl>
<div class="form-group">
<input type="submit" value="Enregistrer" class="btn btn-primary" />
</div>
</form>
谢谢
我使用EF core 2.2和automapper 6.0.0
答案 0 :(得分:1)
您的问题是您没有在表单中保留LabelName。
使用@Html.DisplayNameFor(model => model.LabelName)
或@Html.DisplayFor(model => model.LabelName)
不会生成可通过提交表单从中“收集” LabelName值的输入标签。
您的表单中必须包含以下内容:
<input type="hidden" asp-for="LabelName" />