JavaScript结果黑客无法正常工作

时间:2013-03-05 15:43:31

标签: javascript asp.net-mvc-3 new-window

问题:我错过了什么让这个黑客工作?

对于我正在研究的MVC应用程序,我遇到了一个“不寻常”的案例。

我们使用ActiveReports生成某些报告,对于允许的用户,在我们的布局上显示ActionLink,允许访问在新窗口中打开的这些报告。该项目的方向是所有报告将在新窗口中打开。

但是,有一个异常值我无法应用简单的ActionLink修复程序,因为我们使用包含几乎下拉列表和文本字段的叠加层来访问此报表。这些组合被送到控制器,控制器根据给定的条件返回一个动作的重定向(有一些特定的检查只应该发生在服务器上,因此我们不能在这个叠加层的JavaScript中执行此操作对话。)

现在,我不是一个让像MVC这样的小限制而不是(直接)允许我重定向到一个新窗口阻止我,所以我尝试了给定的JavaScriptResult黑客,因为这已经是一个一次性的情况,对于我的问题来说,它似乎是最容易和最易维护的解决方案,尽管它是一个黑客攻击:

public ActionResult GenerateFooReport(string someInfo)
{
    // HACK: MVC does not allow redirects to open a new window, so
    //       return some JavaScript that forces a new window open.
    string script = "window.open('/controller/action?param=" + someInfo + "');";
    return JavaScript(script);
}

当然,当我运行导致此方法触发的操作(输入Foo,正确的下拉选项)时,我看到以下输出:

window.open('/controller/action?param=foo')

...而不是那个JavaScript应该自动打开的报告。

虽然我知道这种用法(在大多数情况下)被认为是反模式,但我无法修改用户界面以适应更可接受的用法。

问题:我错过了什么让这个黑客工作?

编辑:尝试了另一项无效的替代实施:

private ActionResult GenerateFooReport(string someInfo)
{
    // HACK: MVC does not allow redirects to open a new window, so
    //       return some JavaScript that forces a new window open.
    string script = "<script>window.open('/controller/action?param=" + someInfo + "');</script>";
    return Content(script);
}

这同样没有效果。

编辑:另一次不成功的黑客攻击:

private ActionResult GenerateFooReport(string someInfo)
{
    // HACK: MVC does not allow redirects to open a new window, so
    //       return a redirect to a url that executes javascript that
    //       opens the new window.
    string script = "javascript:window.open('/controller/action?param=" + someInfo + "');";
    return Redirect(script);
}

编辑:这种情况的恶势影响很大!新的方向已经来避免控制器中的这些恶意操作,而是在JavaScript中执行它们。话虽这么说,我仍然很好奇实际的方式让黑客工作,只是为了我自己的启发。

1 个答案:

答案 0 :(得分:1)

尝试直接调用jquery .load函数。

return JavaScript("$('#targetdiv').load('controller/action?param="+someInfo+"');");