Перенаправление после загрузки - PullRequest
0 голосов
/ 26 апреля 2018

Я новичок в MVC. У меня есть индексная страница. Который отображает список элементов для пользователя. Затем пользователь может добавить новый элемент. После того, как пользователь добавил новый элемент, для него загружается файл, содержащий конфиденциальную информацию, которую он добавил. Все это прекрасно работает, но ....

Моя проблема в том, как теперь перенаправить их обратно на страницу индекса, чтобы обновить список элементов? Это почти как мне нужно перенаправление после загрузки.

Примечание: вставка скачать все отлично работает. Я просто пытаюсь понять, как сделать перенаправление на другую модель после загрузки, чтобы я мог обновить свой список.

Сначала я не могу выполнить перенаправление, поскольку данные, сохраняемые в файл, являются конфиденциальными, поэтому я не хочу никуда их отправлять.

[Authorize]
public async Task<IActionResult> Index(int clientId, string error)
    {
     // ....... Removed
     var model = new SecretIndexModel()
        {
            Client = clients.Client,
            ErrorMessage = error
        };
        return View(model);
    }

На этой странице пользователь может добавить новый элемент.

[Authorize]
[HttpPost]
public async Task<IActionResult> Add(SecretIndexModel model)
{

 /// removed ....

 return DownloadDocument("results json string"); 
 }

Скачать

 public FileResult DownloadDocument(string id)
    {
        var ms = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("abc"));

        return File(ms, System.Net.Mime.MediaTypeNames.Application.Octet, "secret.json");
    }

Я ошибаюсь? Я знаю, что мне нужно добавить что-то вроде этого, потому что это работает, если я возвращаю это вместо загрузки.

return RedirectToAction("Index",
       new
          {
           clientId = model.Client.Id,
           error = (client.Errors == null)
                   ? string.Empty
                   : client?.Errors?.FirstOrDefault()?.Message
          });

Обновление:

Я могу отправить данные, используя TempData, но это, похоже, не сильно помогает, тогда я могу обновить страницу индекса, но не загрузить файл.

1 Ответ

0 голосов
/ 26 апреля 2018

Как отметил @ADyson в комментариях, загрузка и перенаправление - это два разных ответа, и вы можете вернуть только один ответ. Лично я бы вернул редирект, а затем просто включил ссылку для загрузки файла. Вы можете сохранить URL-адрес ссылки в TempData и представить его в виде оповещения или всплывающего уведомления. Вы также можете установить мета-тег обновления, чтобы автоматически запрашивать загрузку. Например, проверьте страницу загрузки Visual Studio . Он загружает страницу со ссылкой для загрузки файла в случае, если он не запускается автоматически, но затем, через секунду или две, вы получаете автоматический запрос на загрузку.

Если вы действительно хотите пойти дальше, особенно если загрузка занимает некоторое время, вы можете начать процесс создания файла загрузки и немедленно вернуть перенаправление. Затем, используя SignalR, вы можете уведомить пользователя, когда загрузка фактически готова, или даже автоматически загрузить ее в этот момент. Это обеспечивает гораздо более идеальный пользовательский опыт, опять же, если загрузка занимает некоторое время для создания. Вместо того, чтобы показывать пользователю пустую страницу, он сразу же получает ответ и загружает его, когда он будет готов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...