Почему мой скрытый ввод не передается в модельный класс? - PullRequest
0 голосов
/ 11 января 2019

У меня есть класс Dto с вложенными классами, которые я использую, чтобы связать модель с моим представлением. Вложенный класс имеет свойство id, которое необходимо передать обратно в службу приложений, но пока я получаю null

Некоторые вещи, которые я пробовал,

<input asp-for="StoreWalk.Department.Id" type="hidden" />
@Html.HiddenFor(h => h.StoreWalk.Department.Id)
<input type="hidden" name="version" value="@Model.StoreWalk.Version" />
<input type="hidden" name="department.id" value="@Model.StoreWalk.Department.Id" />
<input type="hidden" name="department_id" value="@Model.StoreWalk.Department.Id" />
<input type="hidden" id="StoreWalk_Department_Id" name="department_id" value="@Model.StoreWalk.Department.Id" />

Моя модель класса

public class CreateOrEditStoreWalkViewModel
{
    public CreateOrEditStoreWalkDto StoreWalk { get; set; }
    public bool IsEditMode => StoreWalk.Id.HasValue;
}


public class CreateOrEditStoreWalkDto : EntityDto<int?>
{
    // Id property is implemented in `EntityDto` as int?

    [Required]
    public string Store { get; set; }

    public string Comments { get; set; }

    public byte[] Signature { get; set; }

    public int Version { get; set; }

    public DepartmentsDto Department { get; set; }
}


public class DepartmentsDto : EntityDto
{
    // Id property is implemented in `EntityDto`
    public string Name { get; set; }
}

EntityDto можно найти здесь: https://github.com/aspnetboilerplate/aspnetboilerplate/blob/dev/src/Abp/Application/Services/Dto/EntityDto.cs

My View.cshtml

    <form name="StoreWalkInformationsForm" role="form" novalidate class="form-validation">

        @if (Model.IsEditMode)
        {
            <input type="hidden" name="id" value="@Model.StoreWalk.Id" />
        }


        // Note, im not trying all at once, these are just what ive tried so far

        <input asp-for="StoreWalk.Department.Id" type="hidden" />
        @Html.HiddenFor(h => h.StoreWalk.Department.Id)
        <input type="hidden" name="version" value="@Model.StoreWalk.Version" />
        <input type="hidden" name="department.id" value="@Model.StoreWalk.Department.Id" />
        <input type="hidden" name="department_id" value="@Model.StoreWalk.Department.Id" />
        <input type="hidden" id="StoreWalk_Department_Id" name="department_id" value="@Model.StoreWalk.Department.Id" />

        .........
  </form>

Я ожидаю, что department.id будет установлен, но department всегда будет нулевым. enter image description here

Ответы [ 2 ]

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

3 дня и я наконец-то нашел решение.

<input type="hidden" name="department[id]" value="@Model.StoreWalk.Department.Id" />
<input type="hidden" name="department[name]" value="@Model.StoreWalk.Department.Name" />
0 голосов
/ 14 января 2019

Примечание. Тип модели представленных данных в форме должен совпадать с типом параметра в методе post.

Значение asp-for на входе указывает, что @model в представлении должно быть CreateOrEditStoreWalkViewModel, но из вашего скриншота тип параметра, полученного в методе, равен CreateOrEditStoreWalkDto.

Попробуйте изменить код действия, как показано ниже

 [HttpPost]
    public void CreateStoreWalk(CreateOrEditStoreWalkViewModel createOrEditStoreWalkDto)
    {
        //the stuff you want
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...