Как передать List из одного контроллера в другой через html-кнопку?
В моем контроллере CalculationsController в пост-методе CalculateMenu() формируется список. Также в этом методе я рисую таблицу, представляющую список, и кнопку. Кнопка должна отправлять этот список в другой контроллер. Как это сделать?
Метод CalculateMenu:
|
1 |
[HttpPost] public async Task<IActionResult> CalculateMenu([FromForm] int[] peopleCount, [FromForm] DateOnly date) { StringBuilder resultString = new StringBuilder(); resultString.AppendLine("<style>table, th, td {n table-layout: fixed; n border: 1px solid; n width: 100%; n border-collapse: collapse; n}</style>"); resultString.AppendLine("<h1>Ответ:</h1>"); var resultIngredients = await _calculationsService.CalculateIngredients(peopleCount, date); resultString.Append(CalculateTotalWeightOfEveryIngredient(resultIngredients)); resultString.Append(await CalculatePrice(peopleCount, date)); //Как правильно генерировать кнопку? Что я пробовал: //resultString.AppendLine($"<form method="какой метод использовать?" action="адресс другого контроллера(не знаю как его зднсь задать)">n <button type="submit"> submit </button>n</form>"); return Content(resultString.ToString(), "text/html; charset=utf-8"); } |
Я попытался отправить post/put запрос в CalculationsController в другой метод, а затем перенаправить на нужный контроллер:
|
1 |
[HttpPost] [Route("api/calculations/send")] public ActionResult Send() { TempData["mydata"] = "test"; return RedirectToAction("SaveReport", "ReportController"); } |
Я попытался преобразовать List в JSON и отправить его в запросе другому контроллеру. Ничего не получилось, в запросе было всего несколько символов:
|
1 |
string serializedIngedientsList = JsonSerializer.Serialize(resultIngredients); resultString.AppendLine($"<button role="button" class="sendBtn"><a href="www.siteadress/api/reports/{serializedIngedientsList}" style="text-decoration: none; color: #000000"> Отчёт </a></button>"); |
Дополнительно:
Содержание
Ответы:
|
1 |
resultString.AppendLine($"<button role="button" class="sendBtn"><a href="www.siteadress/api/reports/{serializedIngedientsList}" style="text-decoration: none; color: #000000"> Отчёт </a></button>"); |
Вот здесь не тупая конкатенация должна быть.
Во первых, URL строки должны экранироваться.
Во вторых, здесь ты передаешь через путь, а надо через запрос (то что после ? идет).
В третьих, если передавать через путь, то там не JSON, а собственная структура для сериализации.
Почитай метанит
- Спасибо за ответ, обязательно попробую. Только вопрос: "В третьих, если передавать через путь, то там не JSON, а собственная структура для сериализации." - можете сказать название этой структуры? В идеале бы ещё готовый код получить, чтобы я мог изучить его
- Это не структура, а способ передачи данных. В статье описано как массивы и другие объекты передавать
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для передачи List из одного контроллера в другой через html-кнопку можно использовать различные подходы. Один из способов - это использование скрытого поля (hidden field) в форме, которая отправляется при нажатии на кнопку.
Прежде всего, у вас должны быть два контроллера - один, который отображает форму с кнопкой, и второй, который принимает данные из этой формы. Давайте рассмотрим пример на языке программирования PHP.
Первый контроллер (Controller1.php) содержит форму с кнопкой и скрытым полем, где будет храниться список (List):
Здесь $list - это переменная, содержащая ваш список данных. Она преобразуется в JSON формат с помощью функции json_encode и передается через скрытое поле.
Второй контроллер (Controller2.php) получает данные из формы и обрабатывает их:
Здесь мы проверяем, был ли отправлен список через POST запрос, затем декодируем JSON строку обратно в массив с помощью функции json_decode и можем использовать полученный список в дальнейшей обработке данных.
Таким образом, вы можете передать List из одного контроллера в другой через html-кнопку, используя скрытое поле и JSON формат для передачи данных. Не забудьте обработать данные на стороне контроллера, куда они передаются, чтобы использовать их в дальнейшем.