В C#, чтобы передать коллекцию из представления (View) в контроллер при выполнении POST-запроса, можно воспользоваться различными подходами. Рассмотрим несколько вариантов.
1. Использование модели представления:
Сначала необходимо создать модель представления, которая будет содержать коллекцию, которую вы хотите передать в контроллер. Например, если вы хотите передать список строк, вы можете создать модель следующим образом:
public class MyViewModel { public List<string> MyCollection { get; set; } }
Затем в представлении (View) вы можете использовать foreach-цикл или другой подход, чтобы создать элементы ввода для каждого элемента вашей коллекции:
@model MyViewModel @using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) { for (int i = 0; i < Model.MyCollection.Count; i++) { @Html.HiddenFor(m => m.MyCollection[i]) } <button type="submit">Отправить</button> }
В данном примере, для каждого элемента в коллекции "MyCollection" создается скрытое поле (hidden field), что позволяет передать значение элемента из представления в контроллер.
В контроллере вы можете получить коллекцию следующим образом:
[HttpPost] public ActionResult ActionName(MyViewModel model) { List<string> myCollection = model.MyCollection; // Дальнейшая обработка коллекции }
2. Использование аргументов формы:
В представлении вы также можете использовать конструкцию с прямым указанием аргумента формы, чтобы передать коллекцию в контроллер:
@using (Html.BeginForm("ActionName", "ControllerName", FormMethod.Post)) { for (int i = 0; i < Model.MyCollection.Count; i++) { <input type="hidden" name="MyCollection[@i]" value="@Model.MyCollection[i]" /> } <button type="submit">Отправить</button> }
В контроллере вы можете получить коллекцию следующим образом:
[HttpPost] public ActionResult ActionName(List<string> myCollection) { // Дальнейшая обработка коллекции }
3. Использование AJAX:
Использование технологии AJAX также позволяет передавать коллекции из представления в контроллер. Вы можете отправить POST-запрос из представления, передавая данные в виде JSON-объекта.
$.ajax({ url: '/ControllerName/ActionName', type: 'POST', dataType: 'json', data: { myCollection: JSON.stringify(Model.MyCollection) }, success: function (result) { // Обработка ответа } });
В контроллере вы можете получить коллекцию следующим образом:
[HttpPost] public ActionResult ActionName(string[] myCollection) { List<string> myCollectionList = myCollection.ToList(); // Дальнейшая обработка коллекции }
Это не полный список возможностей передачи коллекции из представления в контроллер, но они являются наиболее распространенными при использовании C#. Выбор конкретного подхода будет зависеть от требований вашего проекта и специфики задачи.