我正在使用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'");
之前我成功使用过,但这次我看到了这个:
修改
关注@ 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。
这里发生了什么,我可能错过了一个图书馆吗?
答案 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
所以我不确定问题是什么?