首先,我是做了一些尝试的,一开始我的想法是这样的,如果能返回一段javascript脚本并执行我就可以利用这段脚本关闭当前窗口。然而,无论我Content里面怎么写,甚至改第二个参数类似contentType的东西试图,改变返回到前端的这段脚本的格式,但是在前端总是冷冰冰的显示出原样,并不识别成javascript执行。
后来,我想了一个办法我先用后台的ViewBag传递一个参数给前端,然后在前端根据这个参数比对来决定是否执行下面的一段脚本,一开始想法也简单用window.close()来关闭这个窗口,但是结果很不好,无论这个方法里面的window.close是否执行窗口都没办法关闭。后来我想想打开窗口的方式是xadmin.open对了是用layui的插件打开的这个窗口关闭的方式当然要用layui。
最后附上一部分代码让大家参考,我参考了很多人说的方式自然都无法实现才考虑自己用一些方法来处理这个问题,这个问题有一些业务场景首先是submit按钮提交form表单到后台,自然不是ajax请求,如果是ajax请求想必简单多了。第二采取的方法提交表单之后仍然返回当前页面。你可以理解提交表单之后整个页面刷新了一下,你想在提交方法后面写一段js用来关闭窗口应该是不可能的因为这个时候页面刷新了,之前执行到的js又重头来过了。
下面是前端的代码:
<script type="text/javascript">
$(document).ready(function () {
if ('@ViewBag.isClose' == 'True') {
debugger
var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
parent.layer.close(index); //再执行关闭
window.parent.location.reload();
}
});
</script>
再下来是后台代码:
//Authorization
//
// GET: /Admin/Authorization.html
[HttpPost]
public async Task<ActionResult> Authorization(AuthorizationPageMod obj)
{
TData<PrivilegeApplicationsEntity> data = await privilegeApplicationsBLL.GetEntity(obj.ApplyId);
obj.FreeAdmissionApplyObj = data.Result;
OperatorInfo operatorInfo = await Operator.Instance.Current();
//需要更改
data.Result.CheckerId = operatorInfo.UserId;
if (this.ModelState.IsValid)
{
ViewData["result"] = privilegeApplicationsBLL.SaveEntity(obj);
}
else
{
ViewData["result"] = "请检查信息是否设置完整。";
}
ViewBag.isClose = true;
return View(obj);
}