При желании откройте новое окно в контроллере Action - PullRequest
0 голосов
/ 23 марта 2011

В приложении ASP.Net MVC 2 я хочу сделать следующее: в действии, которое обрабатывает сообщение формы, которое я хочу:

  • Перенаправить пользователя на другое представление в текущем окне браузера
  • Открыть новое окно с другой информацией (другой вид)

Это можно легко сделать, установив атрибут target="_blank" в элементе формы и добавив следующий скрипт jQuery:

$(function () {
    $("form").submit(function () {
        window.location = "...";
    });
});

Представление, возвращаемое обработчиком действия, будет отображено в новом окне, где размещена форма.

Но давайте немного усложним:

  • Если при выполнении действия нет ошибок уровня обслуживания, выполните следующие действия.
  • Если при выполнении действия возникла какая-либо ошибка уровня службы, не открывайте новое окно, и представление, возвращаемое действием, должно отображаться в том же окне, где форма была на первом месте.

Например: представьте, что сервисный уровень генерирует pdfDocument, чтобы показать пользователю, если все в порядке, и этот pdf должен быть показан в новом окне.

[HttpPost]
public ActionResult SomeAction(FormCollection form)
{
    var serviceMethodParams = ... // convertion from the form data somehow

    MemoryStream pdfDocument = null;

    if (!serviceLayer.DoSomething(serviceMethodParams, out pdfDocument))
    {
        // Something went wrong, do not redirect, do not open new window
        // Return the same view where error should be displayed
        return View(...);
    }

    // The service method run ok, this must be shown in a new window and the origal window must be redirected somewhere else
    return File(pdfDocument.ToArray(), "application/pdf");
}

Обратите внимание, что исходное решение работает нормально, когда служба возвращает true, но если служба возвращает false, представление, показывающее ошибки, отображается в новом окне, а исходное окно перенаправляется в другое место.

1 Ответ

1 голос
/ 23 марта 2011

В этой ситуации лучшим вариантом будет просто вернуть URL-адрес, специфичный для этого документа, на который пользователь может указать, и ваш ajax-вызов, в случае успеха, берет URL-адрес, возвращенный из вашего метода действия, а затем открывает новыйсамо окно, указывающее на этот URL.В случае ошибки вы можете отобразить ошибки или что-то подобное - в основном, данные складываются в возвращаемое значение Json.

Вне вызова ajax наиболее приемлемым для меня шаблоном является повторное отображение представления, а затем добавление некоторого загрузочного JavaScript, чтобы открыть новое окно, указывающее на этот конкретный URL.

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