Ajax-вызов для обновления div в случае неудачи или перенаправления на страницу в случае успеха - PullRequest
1 голос
/ 02 августа 2011

Справочная информация:

У меня есть всплывающее окно, которое позволяет мне создать компанию, в этом всплывающем окне есть текстовое поле с именем компании, и это обязательное поле (используется [Required]аннотация данных на основе модели представления).

<div class="popup-editor">
    <h4 class="popup-title">
    Add new Company</h4>
    @using (Ajax.BeginForm("Create", "Company", new AjaxOptions { UpdateTargetId = "popup-editor", OnSuccess = "$.validator.unobtrusive.parse('form');" },))
    {
        @Html.ValidationSummary(true);
        <table>
            <tr>
               <td class="label">
                   Company Name
               </td>
               <td class="editor-field">
                    @Html.EditorFor(x => x.Name)
                    @Html.ValidationMessageFor(x => x.Name)
               </td>
            </tr>
        </table>
        <div class="popup-buttons">
            <a href="#" onclick="return togglePopupEditor();">Cancel</a>
            <input type="submit" value="Add Company" />
        </div>
     }
</div>

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

Проблема:

Когда нет ошибок проверки, мне нужно иметь возможность перенаправить на новую страницу (страницу с информацией о компании), но вместо этого эта страница вставляется в div, где находилось всплывающее содержимое.Например:

public ActionResult Create(CreateCompanyModel model)
{
        if(!ModelState.IsValid)
        {
            return PartialView("_AddCompanyEditor");
        }

        Company c = CompanyService.Create(model.Name);
        return RedirectToAction("Details", new { companyId = c.Id });
}

Есть ли способ либо;принудительно выполнить полное перенаправление для всей страницы или перейти на стандартную форму HTML?

1 Ответ

2 голосов
/ 02 августа 2011

Не совсем.Браузеры обрабатывают перенаправления AJAX, не уведомляя вызывающий JavaScript о том, что произошло.Одним из вариантов будет возврат небольшого фрагмента HTML-кода, содержащего тег javascript, который перенаправляет страницу.Обработка jQuery на стороне клиента должна его подхватить и запустить.

Большинство других опций может включать изменение ваших AjaxOptions для запуска метода, который отслеживает что-то конкретное в результатах и ​​действует по-разному в зависимости отответ.Для проекта, над которым я работаю в настоящее время, все наши запросы AJAX проходят через специальную «структуру событий», так что различные действия могут выполняться в зависимости от того, какие события возвращаются из действия контроллера.

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