我正在通过带有以下脚本标签的表单上传文件:
@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}
我如何才能将此重定向到适当的操作?
谢谢!
答案 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}}