我应该如何配置我的视图以在 MVC 中获取窗口.父值
How should I configure my view for getting window.parent value in MVC?
我得到了这个 html 表单内容,所以我可以调整我的剃须刀视图以设置我的隐藏值并正确运行,但到目前为止我没有得到任何值设置。在我视图中的 iframe 中,这是我拥有的内容:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ThirdPartyHandler.aspx.vb" Inherits="ThirdPartyHandler" %>
<!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 id="Head1" runat="server">
<title>Welcome</title>
<script type="text/javascript" language="JavaScript">
<!--
function valuesSet() {
try
{
window.parent.document.MyForm.MyHiddenValue.value = "true";
window.parent.document.MyForm.submit();
}
catch(err)
{
//Silently Swallow any Error here as we may not be in a hosted container with a listening form...
}
}
//-->
</script>
</head>
<body onload = "valuesSet();">
<h1><br /><br />Thank you.</h1>
<input type="hidden" name="MyHiddenFormComplete" value="true" />
</body>
</html>
因此,这一切都来自跨域的iframe内容,而不是我的应用程序中。
现在在我的剃刀视图中,我正在尝试这样的事情:
@using (Html.BeginForm(null, null, FormMethod.Post, new { name = "MyForm", id = "MyForm" }))
{
<div class="row">
<iframe id="frame" src = '@Model.SecureUrl' width = "100%"
height="360px" frameBorder="0"></iframe>
<input type="hidden" name="MyHiddenValue" />
</div>
}
我期望发生的事情是,当 valuesSet() 函数在 iframe 中执行时,我的本地"MyHiddenValue"隐藏字段会将值设置为"True",但这不会发生。我做错了什么?
"所以这一切都来自跨域的iframe内容,而不是我的应用程序中。
那是你的问题。您无法通过客户端代码获取/更改两个不同域之间的任何内容。如果可以的话,这对浏览器来说将是一个非常大的安全问题。
想象一下,我可以在我的网站上拥有指向另一个网站(假设Gmail网站)的任何iframe,我可以在那里操纵东西,以获取有关用户的一些个人信息(假设他已经在该浏览器中登录了他的Google帐户)。
您将无法执行此操作。
不过,有一个解决方法:
-
您的合作伙伴应该调用您网站的某个服务器端页面,例如:
function valuesSet() { location.href = "http://yoursite.com/?myhiddenvalue=true"; }
-
您的服务器端页面应执行以下操作:
<body onload="loaded();"> <script type="text/javascript"> function loaded() { window.parent.document.MyForm.MyHiddenValue.value = getParameterByName("myhiddenvalue"); window.parent.document.MyForm.submit(); } function getParameterByName(name) { name = name.replace(/['[]/, "''[").replace(/[']]/, "'']"); var regex = new RegExp("[''?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results == null ? "" : decodeURIComponent(results[1].replace(/'+/g, "")); } </script>
这样做可以避免跨域客户端安全问题。
相关文章:
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 通过mvc中的ajax动作链接获取关于成功的响应头
- MVC Jquery-按钮点击-获取if语句错误
- 获取当前页面MVC 5的pdf
- MVC Syncfusion Grid-HTML EJ Grid-获取Jquery中所选行的主键
- 如何在asp.net MVC中从View获取值到JavaScript
- 获取从 .post() 到 PHP 文件的响应,但只能在 MVC 中获取
- 从 javascript 获取 MVC 控制器中的操作参数时出错
- MVC Razor 从 javascript 视图中的控制器获取值
- 在Javascript函数中获取MVC控制器名称
- 可以't使用asp.net mvc 3获取事件模糊
- AngularJS使用MVC动态获取html,附加到主体,并绑定一个控制器
- 在asp.net mvc 3中,如何在不刷新页面的情况下从部分视图获取值到父视图
- Spring MVC获取onclick输入星级的值
- Sencha Touch 2-使用MVC获取Form值
- 通过单击“MVC 获取错误”中的“下一步”按钮 asp.net 在同一详细信息页面上显示记录
- C#MVC获取完整的文件路径
- 点击Asp.net MVC获取链接
- JavaScript - MVC.获取多维数组的值