свойства поста "AutoMember" - PullRequest
       22

свойства поста "AutoMember"

0 голосов
/ 14 января 2019

Я новичок в autopper, и у меня проблема с отображением навигационных свойств. Я создал карту, как это:

CreateMap<ObjEntity, ObjEntityViewModel>()
                .ForMember(dest => dest.LabelName,
                    opts => opts.MapFrom(src => src.IdNavigation.LabelName)).ReverseMap();

он сделал плоский объект и работает нормально. Но когда я отправляю обратно ObjEntityViewModel из моей формы редактирования, свойство «LabelName» всегда равно нулю. Похоже, все свойства, определенные с ForMember всегда нулевым, когда он отправляет обратно из моей HTML-формы. Я не понимаю, почему это ноль и как я могу решить эту проблему.

Код моего контроллера:

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

1 Ответ

0 голосов
/ 14 января 2019

Ваша проблема в том, что вы не сохраняете LabelName в своей форме.

Использование @Html.DisplayNameFor(model => model.LabelName) или @Html.DisplayFor(model => model.LabelName) не генерирует входные теги, из которых значение LabelName может быть «собрано» путем отправки формы.

В вашей форме должно быть что-то подобное:

<input type="hidden" asp-for="LabelName"  />
...