我试图找到答案并遇到一些没有产生预期结果的事情。
所以我写了一个HTML Helper加载到(fancybox)iFrame中:
<%= Html.ActionFrame("Projects", "Edit") %>
结果页面有一个保存按钮,当前保存数据并重定向到iFrame中的索引页面。行动如下:
if (ModelState.IsValid)
{
projectRepository.saveProject(record);
return RedirectToAction("Index");
}
但我想要做的是点击保存后iFrame会关闭以及保存数据。
我遇到了this,这与我希望能够为iFrame做的类似,它会使当前的操作变得更简单。
提前致谢!
答案 0 :(得分:1)
好吧,我想我得到了这个。 我在共享目录中创建了一个名为Close的视图,其内容为:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Close</title>
</head>
<body>
<div>
<script type="text/javascript">
parent.$.fn.fancybox.close();
parent.location.reload(true);
</script>
</div>
</body>
</html>
在行动中我只是return View("Close");
。它会关闭iFrame并刷新调用iFrame的页面。
答案 1 :(得分:1)
我认为返回Close ActionMethod是你最好的选择。你可以从你的ActionMethod返回JavaScript结果,但是你定义了你的html / javascript应该如何在你的ActionMethod中而不是在View中(我不是特别喜欢)。
与你的完全相同的另一个解决方案是......
<script type="text/javascript">
if (window.parent != null)
window.parent.location = '<%= Url.RouteUrl(new {
controller = "YourContoller",
action = "YourAction" }) %>';
else
window.location = '<%= Url.RouteUrl(new {
controller = "YourController",
action = "YourAction" }) %>';
</script>
然后,您可以专门重定向到Controller / Action,而不仅仅是重新加载父页面。或者也许你传回一个参数/模型来确定你应该重定向到哪条路线。
答案 2 :(得分:0)
您可以使用jquery.post从iframe调用您的操作。
然后使用.post方法的回调来隐藏iframe。
$.post('/MyController/MyAction',
{ param1: $('field1'), param2: $('field2') },
function(data) {
if (data) {
$("#myIFrame").fadeout();
}
}