2016-10-18 3 views
1

Чтобы было ясно, что это не какой-то спам, а запрос от клиента, его следует обрабатывать таким образом.Html.BeginForm отправить форму в текущем окне и открыть новое окно с другим URL-адресом

У меня есть проект MVC, и я хочу отправить форму в текущем окне, а также открыть новое окно со статическим URL-адресом, например www.google.se. Как теперь у меня есть модальных, который показывает с формой вида:

<div id="openModal" class="modalDialog"> 
      <div> 
       @using (Html.BeginForm("Action", "controller", new { id = Model.Id }, FormMethod.Post)) 
       { 
        <h4> 
         Are you sure? 
        </h4> 
        <br /> 
        <input type="submit" value="Yes" class="btn btn-default" /> 
        <a href="#close" title="Close" class="btn btn-default">Nope</a> 
       } 
      </div> 
     </div> 

Так я ищу для представления формы должны быть выполнены в главном окне, а затем открыть еще одно окно, а также. Это новое открытое окно должно быть без панели инструментов или адресной строки.

Редактировать: Не важно, открывается ли окно до или после подачи формы, так как при отправке формы нет подтверждения.

ответ

0

Если вы можете использовать JQuery, вы можете добавить обработчик для кнопки отправки, этот код не предотвратит отправку формы.

$(document).ready(function() { 
    $("#submit").on("click", function() 
    { 
     var tab = window.open(url, '_blank'); 
     tab.focus(); 
    }}); 

или поставить обработчик для формы

$('#openModal').submit(function(e){ 
      var tab = window.open(url, '_blank'); 
      tab.focus(); 
    }); 
}); 

Без JQuery

document.getElementById("submit").onclick = function() { 
var tab = window.open(url, '_blank'); 
tab.focus(); 

};

+0

Боюсь, я не могу использовать JQuery. Но я могу использовать JavaScript, хотя – Benji

+0

Порядок опсов здесь неправильный. Откроется новое окно и * затем * будет отправлена ​​форма. На основе того, как OP формулирует вопрос, требуется обратное: форма отправляется, затем открывается окно, предположительно после успешной отправки. Насколько важно это неизвестно, но это может быть важно в зависимости от того, что происходит в этом новом окне. –

+0

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

0

Во-первых, единственный способ открыть новое окно - с помощью JavaScript. Независимо от того, имеет ли окно управление, а хром также настроен этим JavaScript, когда он создает новое окно. Однако имейте в виду, что это в конечном счете контролируется клиентом, и его можно применять, чтобы в новых окнах были кнопки и хром, и даже они не могут быть новыми окнами вообще, а только новые вкладки. В конечном итоге вы не имеете никакого реального контроля над этим; вы можете только предложить.

Во-вторых, сообщение формы будет по умолчанию приводить к перезагрузке всего представления, прерыванию любого выполняющегося в настоящее время JavaScript и предотвращению запуска JavaScript. Это означает, что вы не можете напрямую открыть окно после POST, потому что нет места для этого. Однако вы можете открыть новый вид в новом окне. Например, если сообщение отправляет пользователя на страницу подтверждения, эта страница подтверждения может иметь JavaScript, который открывает новое окно.

Кроме того, вы можете обрабатывать сообщение через AJAX, что позволит вам оставаться на странице, а затем открывать новое окно в обратном вызове. Однако, если вы не собираетесь использовать jQuery, я бы предложил использовать какую-то библиотеку в этот момент, потому что для правильной обработки запроса AJAX с кросс-браузером требуется глупое количество кода шаблона.

+0

Возможно ли открыть окно перед POST, поскольку открывающееся окно не зависит от результата POST? – Benji

+0

Если это не зависит, то да. Однако имейте в виду, что в зависимости от того, что происходит, это все еще может быть не идеальным. Например, если в форме есть какая-то проверка, и пользователь отправляется обратно на исправление ошибок, окно уже будет открыто. Затем, когда они снова предстанут, у них появится еще одно новое окно. Если сообщение всегда будет «успешным», то, вероятно, лучше открыть окно первым. –

2

Вы можете просто добавить target на свой beginform.

Html.BeginForm("Action", "controller", new { id = Model.Id }, FormMethod.Post, **new {target = "_blank"}**) 

Это откроет новую вкладку/окно.

+0

Это будет обрабатывать POST в новом окне, которое не было задано в вопросе – Benji

Смежные вопросы