Каков правильный синтаксис для привязки списка объектов, содержащих дополнительные (вложенные) списки, при публикации фоC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каков правильный синтаксис для привязки списка объектов, содержащих дополнительные (вложенные) списки, при публикации фо

Сообщение Anonymous »

Я пытаюсь связать сложный объект, который содержит список сложных объектов, которые также содержат собственный список сложных объектов; так вложенные списки объектов. Данные привязываются к странице без ошибок, и я вижу предварительно заполненный контент. Проблема возникает при попытке отправить форму методу-обработчику.
Я могу успешно опубликовать и связать родительский объект (ObjectA), а также все его свойства типа данных. как свойство, которое представляет собой список сложных объектов (ObjectB). Однако я не могу связать список объектов (ObjectC), содержащихся в ObjectB.
Поскольку мой код длинный и сложный (а также конфиденциальный), я приведу простой пример. того, что я пытаюсь сделать.
Мои классы и метод-обработчик:

Код: Выделить всё

// Classes
public class ObjectA
{
public int Id { get; set; }
public IList ObjectBList { get; set; }
}

public class ObjectB
{
public int Id { get; set; }
public IList ObjectCList { get; set; }
}

public class ObjectC
{
public int Id { get; set; }
public string Name { get; set; }
}

// Handler method
public async Task OnPostDoSomethingAsync(ObjectA objectA)
{
// Do Something
}
Мой псевдокод .cshtml; ClassA — это модель страницы.
У меня есть различные типы полей ввода, но в этом примере я просто использую «скрытые».

Код: Выделить всё


@for (var i; i < @Model.ObjectBList.Count(); i++)
{
var objectCList = @Model.ObjectBList[i].ObjectCList.Where(z => z.Id < 4); // I need to perform some filtering logic in multiple places, so create a temp object

@for (var z; z < objectCList.Count(); z++)
{

}

Я хотел бы иметь возможность отправлять эту форму как с помощью кнопки типа отправки (с использованием стандартной формы отправки/перезагрузки страницы Razor), так и через ajax. Мои текущие тесты проводились через сообщение ajax, подобное следующему:

Код: Выделить всё

$.post('/Page?handler=DoSomething', $(#myFormId).serialize(), function () { alert('success'); });
Когда я выполняю действие публикации с помощью кода, написанного выше, я вижу в полезных данных содержимое, подобное следующему:

Код: Выделить всё

Id: 1
ObjectB[0].Id: 1
ObjectB[0].ObjectC[0].Id: 1
ObjectB[0].ObjectC[1].Id: 2
ObjectB[1].Id: 2
ObjectB[1].ObjectC[0].Id: 1
ObjectB[1].ObjectC[1].Id: 2
Результатом этой полезной нагрузки является то, что мой обработчик срабатывает, но параметр «objectA» имеет значение null (предположительно потому, что полученное содержимое не соответствует моей ожидаемой объектной модели и привязка не удалась). Я ожидаю, что получу заполненный объект ObjectA, включая список ObjectB, который будет содержать список ObjectC.
Важно отметить, что если я закомментирую свой код CSHTML, связанный с для привязки ObjectC и просто привязки ObjectA и ObjectB, моя полезная нагрузка выглядит следующим образом:

Код: Выделить всё

Id: 1
ObjectB[0].Id: 1
ObjectB[1].Id: 2
В результате все работает так, как ожидалось. Мой метод обработчика активирован, и ObjectA заполняется, включая ObjectBList, который содержит список ObjectB (как и ожидалось). Поэтому, когда я пытаюсь добавить ObjectC, это нарушает привязку и возвращает значение null в моем обработчике.
Я ожидаю, что делаю что-то не так с тем, как я называю свои поля ввода для ObjectC, и результирующая полезная нагрузка неверна. Будем признательны за любые рекомендации по правильному синтаксису для такого сценария. Если мой подход верен, то я предполагаю, что у меня есть опечатка или подобная проблема, которую мне нужно найти (пока ничего не найдено).

Подробнее здесь: https://stackoverflow.com/questions/781 ... ional-nest
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»