Коллекция объекта обнуляется при публикации в Razor Pages после успешной установки с помощью вызова Ajax - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь динамически добавлять элементы в свойство списка объекта с помощью Razor Pages. Я могу успешно добавить один элемент в список, но когда я пытаюсь добавить другой элемент, он теряет привязку и говорит, что свойство списка имеет значение null.

Остальная часть формы имеет обычные свойства string и int, которые установлены и сохраняются, как ожидалось. Однако, когда я пытаюсь управлять свойством списка, динамически добавляя новые строки с помощью вызова ajax, список обнуляется после первой (успешной) попытки.

Вызов ajax:

$("#btnAdd").on('click', function () {
        $.ajax({
            async: true,
            headers: { 'RequestVerificationToken': $('input:hidden[name="__RequestVerificationToken"]').val() },
            type: "POST",
            url: '?handler=AddOrderItem',
            success: function (partialView) {
                $('#orderItemsContainer').html(partialView);
            }
        });
    });

Метод PageModel:

public IActionResult OnPostAddOrderItem()
    {
        CurrentSample.SampleDistributions.Add(new SampleDistributionResource());
        return Partial("SampleDistributionsPartial", CurrentSample);
    }

Частичное представление:

@model QBSampleGenerator.Models.Resources.CreateSample
@for (int i = 0; i < @Model.SampleDistributions.Count(); i++)
{
    <div class="form-group">
        <label asp-for="@Model.SampleDistributions[i].DistributionAmount" class="control-label"></label>
        <input asp-for="@Model.SampleDistributions[i].DistributionAmount" class="form-control" />
        <span asp-validation-for="@Model.SampleDistributions[i].DistributionAmount" class="text-danger"></span>
    </div>
}

Определение класса объекта CurrentSample:

public class CreateSample
    {
        public int SurveyId { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public int SampleSize { get; set; }
        public int[] FilterIds { get; set; }
        public IList<SampleDistributionResource> SampleDistributions { get; set; }
    }

Сообщите мне если я забыл предоставить необходимую информацию. Заранее большое спасибо за любые советы!

1 Ответ

0 голосов
/ 06 августа 2020

Вы должны проверить CurrentSample после Add(). Здесь я установил CurrentSample это static.

    private  static CreateSample CurrentSample = new CreateSample();

    [HttpPost("/AddOrderItem")]
    public IActionResult OnPostAddOrderItem()
    {
        CurrentSample.SampleDistributions.Add(new SampleDistributionResource());
        return PartialView("SampleDistributionsPartial", CurrentSample);
    }

Коды модели

    public class SampleDistributionResource
    {
        public SampleDistributionResource() { DistributionAmount = 0; }

        public int DistributionAmount { get; set; }
    }

    public class CreateSample
    {

        public int SurveyId { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }
        public int SampleSize { get; set; }
        public int[] FilterIds { get; set; }
        public IList<SampleDistributionResource> SampleDistributions { get; set; }

        public CreateSample() { SampleDistributions = new List<SampleDistributionResource>(); }

    }

Скриншоты теста

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...