AJAX发布JavaScript window.location

时间:2016-01-18 16:46:33

标签: asp.net-mvc

我正在使用Ajax.BeginForm发布表单,因为我在控制器的POST方法中运行了一些方法,这些方法会检查建议的记录是否有效表中已有的内容。

// POST: Electricity
[HttpPost]
public ActionResult CreateSite(ElectricitySiteViewModel newElectricitySiteViewModel)
{
    var dbElectricitySite = AutoMapper.Mapper.Map<ElectricitySite>(newElectricitySiteViewModel);

    if (_service.DoesSiteExist(newElectricitySiteViewModel.SiteNumber)) // site already exists, check balance of split
    {
        if (_service.DoesSiteBalance(newElectricitySiteViewModel.SiteNumber, newElectricitySiteViewModel.SplitPercentage)) // if it balances, create and redirect
        {
            _service.CreateElectricitySite(dbElectricitySite);
            return JavaScript("window.location = 'http://www.google.co.uk'");
        }

        else // doesnt balance, return to create view
        {
            ViewBag.DoesNotBalance = true;
            return View();
        }
    }

    else //site does not exist, create it and redirect
    {
        _service.CreateElectricitySite(dbElectricitySite);
        return JavaScript("window.location = 'http://www.google.co.uk'");
    }         
}

我使用ViewBag作为标志向用户显示他们尝试的分割与已经保存的网站记录相矛盾,因此我可以显示其他消息而无需回复。

然而,当POST有效并且创建了记录时,我发生了什么?我试图通过执行以下操作强制浏览器回发谷歌:

return JavaScript("window.location = 'http://www.google.co.uk'");

之前我成功使用过,但这次我看到了这个:

enter image description here

修改

关注@ JamieD77的评论,我在我的Ajax.BeginForm中添加了一个OnSuccess参数,以显示一条消息作为测试:

@using(Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "updatearea", OnSuccess = "Test" }))

并在我的页面中添加了一个脚本:

@section DialogScripts{
    <script type="text/javascript">

        function Test(data) {
            switch (data.result) {
                case 1:
                    alert(data.result)
                    break;
                case 0:
                    alert(data.result)
                    break;
                case -1:
                    alert(data.result)
                    break;
                default:
                    alert(data.message);
            }
        }

    </script>
}

我的控制器回来了:

return Json(new { result = 0, message = "Record created." });

但是我得到同样的东西,JSON只是输出到浏览器,就像之前的屏幕截图一样,但这次是它的JSON。

这里发生了什么,我可能错过了一个图书馆吗?

1 个答案:

答案 0 :(得分:0)

找到这个问题/答案后:

How to return Javascript from an ASP.NET 5 MVC 6 controller action

我改变了:

return JavaScript("window.location = 'http://www.google.co.uk'");

要:

return Content("<script language='javascript' type='text/javascript'>'http://www.google.co.uk'</script>");

它有效。就我的web.config,MVC版本而言,我在:

 <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
      </dependentAssembly>

与我以前成功使用return Javascript

的项目版本相同

所以我不确定问题是什么?