В приложении 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
, представление, показывающее ошибки, отображается в новом окне, а исходное окно перенаправляется в другое место.