ASP. NET MVC просмотр возвращаемый пустой объект - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть следующий код, но он возвращает пустой объект FormationDTO, я что-то не так сделал?
Я не понимаю, почему он не может правильно связать FormationFormViewModel FormationDTO с параметр действия FormationDTO, он работал в других контроллерах.

FormationsController

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(FormationDTO formation)
{
    if (!ModelState.IsValid){
        return View("FormationForm", new FormationFormViewModel { FormationDTO = formation, Categories = GetCategories() });
    }
    else{
        // DO THE STUFF
    }

}

FormationForm.cs html

@model BSS_IT_Education.Models.FormationFormViewModel

@{ 
    ViewBag.Title = "Formation";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("Save", "Formations"))
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor(model => model.FormationDTO.Id)

    <div class="form-horizontal">

        @Html.ValidationSummary(true, "", new { @class = "text-danger" })

        <div class="form-group">
            @Html.LabelFor(model => model.FormationDTO.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-4">
                @Html.EditorFor(model => model.FormationDTO.Name, new { htmlAttributes = new { @class = "form-control", @placeholder = "Entrez le nom de la formation..." } })
                @Html.ValidationMessageFor(model => model.FormationDTO.Name, "", new { @class = "text-danger" })
            </div>
        </div>

        // BUNCH OF OTHERS FORM-GROUPS

        <div class="form-group">
            <div class="col-md-offset-2 col-md-8">
                <button type="submit" class="btn btn-success">@((Model.FormationDTO.Id == 0) ? "Sauvegarder  " : "Modifier")</button>                
            </div>
        </div>
    </div>
}

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Если я правильно понимаю код. Похоже, вы должны передать FormationFormViewModel в действие контроллера. Не FormationDTO.

0 голосов
/ 20 февраля 2020

Посмотрите на сгенерированный HTML на странице. Я предполагаю, что name атрибуты ваших входных элементов будут выглядеть примерно как formationDTO.name, потому что ваша ViewModel - FormationFormViewModel. Но ModelBinder на бэкэнде будет искать только свойство name, потому что вы пытаетесь создать FormationDTO.

. Возможно, вам придется вручную создать эти элементы ввода или использовать дочернее действие чтобы получить правильную ViewModel для представления, которое позволяет использовать помощники razor @ Html для создания правильных элементов.

Или, более простой вариант - заставить действие вашего контроллера принять FormationFormViewModel, тогда ModelBinder должен правильно построить свойства FormationDTO, которые вы хотите.

...