RedirectToAction из отправки формы JSON - PullRequest
0 голосов
/ 09 октября 2018

Я загружаю файл через форму со следующим тегом скрипта:

@using (Html.BeginForm("CreateCompResponse", "Surveys", FormMethod.Post, new { enctype = "multipart/form-data", onsubmit = "return myFunction()" }))

При успешной загрузке контроллер должен RedirectToAction:

   return Json(new
                    {
                        redirectUrl = Url.Action("CreateBenefitSummary", "Surveys"),
                        isRedirect = true
                    });

В представлении яОбрабатываю функцию следующим образом (я скопировал и вставил это из другого SO сообщения, поскольку я не знаю JavaScript):

<script type="text/javascript">
    success: function(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}
</script>

Вместо того, чтобы возвращать желаемое действие контроллера, он возвращает строку JSON:

{"redirectUrl":"/Surveys/CreateBenefitSummary","isRedirect":true}

Как я могу заставить это перенаправить на правильное действие?

Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Вы используете Html.BeginForm, что означает, что ожидаемое ActionResult находится в PostBack.Способ return Json будет работать, если вы используете Ajax.BeginForm и передаете ему имя функции для onsuccess.Вы должны сделать это:

@using (Ajax.BeginForm("CreateCompResponse", "Surveys", new AjaxOptions { OnSuccess = "onSuccess",HttpMethod = "Post" }))

И ваша функция должна быть

<script type="text/javascript">
    function onSuccess(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}
</script>

Если вы хотите использовать PostBack, тогда вы можете использовать RedirectToAction вДействие контроллера обработки, чтобы проверить, успешна ли загрузка или нет, на основании результата вы можете использовать вышеупомянутые return RedirectToAction или return View()

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