@kititnikx

Как передать List из одного контроллера в другой через html-кнопку?

В моем контроллере CalculationsController в пост-методе CalculateMenu() формируется список. Также в этом методе я рисую таблицу, представляющую список, и кнопку. Кнопка должна отправлять этот список в другой контроллер. Как это сделать?

Метод CalculateMenu:
[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 в другой метод, а затем перенаправить на нужный контроллер:
[HttpPost]
    [Route("api/calculations/send")]
    public ActionResult Send()
    {
        TempData["mydata"] = "test";
        return RedirectToAction("SaveReport", "ReportController");
    }


Я попытался преобразовать List в JSON и отправить его в запросе другому контроллеру. Ничего не получилось, в запросе было всего несколько символов:
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>");
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 1
AshBlade
@AshBlade Куратор тега C#
Просто хочу быть счастливым
resultString.AppendLine($"<button role=\"button\" class=\"sendBtn\"><a href=\"www.siteadress/api/reports/{serializedIngedientsList}\" style=\"text-decoration: none; color: #000000\"> Отчёт </a></button>");


Вот здесь не тупая конкатенация должна быть.
Во первых, URL строки должны экранироваться.
Во вторых, здесь ты передаешь через путь, а надо через запрос (то что после ? идет).
В третьих, если передавать через путь, то там не JSON, а собственная структура для сериализации.

Почитай метанит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы