Здесь есть несколько проблем.
Во-первых, если у вас есть таблица "books" (множественное число), входные имена должны быть проиндексированы.Затем вам также нужно принять что-то вроде List<Book>
вместо Book
в качестве параметра вашего метода действия.Трудно сказать с помощью только предоставленного кода, но я думаю, что вы повторяете эти входные данные, все с одинаковыми именами для каждой строки.В этом случае будут опубликованы только значения для последнего элемента.Составив список элементов, вы сможете опубликовать их все.
Упрощенно, это означает, что ваши входные данные должны иметь имена вроде [0].Amount
, которые Razor сгенерирует для вас, если вы используете цикл for
и рендервходные данные, такие как:
<input asp-for="@Model[i].Amount" class="form-control" />
Если вы добавляете дополнительные строки (и содержат входные данные) через JavaScript, вам необходимо убедиться, что вы сами генерируете эти проиндексированные имена.В этом отношении может помочь библиотека шаблонов JS.
Во-вторых, не использовать Bind
.Просто не надо.Это ужасно, ужасно и убивает как щенков, так и котят.Для более подробного объяснения см. Мой пост Bind is Evil .Вместо этого используйте модель представления.Как правило, вы должны никогда публиковать класс сущностей.Ваши классы сущностей обслуживают базу данных и ее задачи, которые почти всегда отличаются от задач представления.Кроме того, вы должны никогда просто слепо сохранять что-то, опубликованное пользователем.Даже если вы настаиваете на использовании вашего класса сущностей для привязки, вы можете экспоненциально улучшить защиту и безопасность своего кода, буквально сопоставляя значения из опубликованной версии класса с новым экземпляром, который вы создаете.Затем вы знаете в точности , что сохраняется в базе данных (без богом забытого Bind
), и у вас также есть возможность санировать ввод при необходимости.