Почему мой частичный просмотр не загружает нужное содержимое?

#c# #asp.net #asp.net-mvc #razor #partial-views

#c# #asp.net #asp.net-mvc #razor #частичные просмотры

Вопрос:

У меня есть мой частичный просмотр, который содержит

 @model List<Destination>
    @for (var i = 0; i < Model.Count; i  )
    {
       @Html.HiddenFor(model => model[i].Id)
       <div class="form-row">
           <div class="form-group col-md-10">
                <label>@Html.LabelFor(model => model[i].Path) ( @(i   1) )</label>
                <input type="text" value=@Model[i].Path/>  
                @Html.TextBoxFor(model => model[i].Path, new { @class = "form-control", required = "required" , title = "My custom error message")

            @Html.ValidationMessageFor(model => model[i].Path)
        </div>
        <button class="btn btn-outline-danger" onclick="deleteField(event, 
        '@Model[i].Id');">
                    <i class="fas fa-trash-alt"></i>
                </button>
    }
  

Я добавил входные данные, содержащие значение @Model[i].Path , поскольку я получаю список, я могу выполнять добавления и удаления в списке. Если у меня есть список из 3 элементов, когда я удаляю index i=1 , он всегда удаляет последний индекс, поэтому он удаляет последний элемент. Чтобы проверить, корректен ли полученный ввод, я добавил ввод, и да, значение правильное, но в textboxfor значение не перезагружается и содержит старое значение.

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

Как я могу исправить эти две проблемы, из-за которых кажется, что что-то не так между сервером, который отправляет модель, и временем заполнения частичного просмотра. Все объекты верны.

Редактировать: Для обновления частичного просмотра, например, для удаления элемента

 public ActionResult SupprimerChampDestination(Destinations model, int idToDelete)
        {
            model.Path.RemoveAll(elementToDelete => elementToDelete.Id == idToDelete);
            ViewData.TemplateInfo.HtmlFieldPrefix = Constante.PrefixPartialViewDestination;
            return PartialView(Vues.Paths.Destination, model.Path);
        }
  

И JS:

 function deleteField(event, clickedId) {
            event.preventDefault();
            var model = $("#Form").serialize();
            debugger;
            $.ajax({
                type: 'POST',
                url: '@Url.Action("SupprimerChampDestination", "PathsController")',
                data: model   "amp;idToDelete="   clickedId,
                success: function (response) {
                    debugger;
                    console.log(response);
                    $("#destinationMultiple").html(response);

                },
                error: function(xhr, textStatus, error) {
                    console.log(xhr.statusText);
                    console.log(textStatus);
                    console.log(error);
                }
            });
        }
  

$ («#destinationMultiple») — это div, содержащий частичный просмотр, в который я загружаю результат.

Спасибо

Комментарии:

1. Можете ли вы показать нам, как вы включаете частичный просмотр в свой вариант использования? Когда вы используете частичный просмотр, вам нужно передать ему соответствующую viewmodel для частичного просмотра. если тип не соответствует model , в частичном представлении будет null.

2. @GlennFerrie отредактировал ответ, но модель, полученная частичным просмотром, верна, это совокупность, которая плохо работает, что странно

3. Где вы сохраняете изменения в значениях списка? И есть ли какая-то конкретная причина для цикла for в отличие от foreach?

4. @melkisadek foreach не привязывает проверки и т.д. К правильному индексу, все связано с первым элементом

5. Где в потоке программы вы пытаетесь удалить элементы из списка? В вашем отображаемом частичном коде нет ничего, что удаляло бы элемент. Кроме того, вы можете опубликовать свой отрисованный HTML-код?