JSON表单提交中的RedirectToAction

时间:2018-10-08 21:20:23

标签: javascript asp.net-mvc

我正在通过带有以下脚本标签的表单上传文件:

@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 :(得分:0)

您正在使用Html.BeginForm,这意味着您期望的ActionResult在回发中。 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>

如果要使用回发,则可以根据处理结果在处理控制器操作中使用RedirectToAction来检查上传是否成功,可以使用上述return RedirectToAction或{{ 1}}