asp:LinkBut​​ton不能在iframe内部工作

时间:2014-01-21 22:12:47

标签: javascript asp.net iframe linkbutton

假设我有一个ASP.NET页面,旨在让其他站点在其<iframe>内呈现。进一步假设我的页面包含一些服务器端<asp:LinkButton>控件,这些控件将呈现为<a href="javascript:__doPostBack(...)">个链接。

如果_ doPostBack()在iframe中执行,我会很高兴,但事实并非如此 - 而是在控制台中出现“ _doPostBack not defined”错误。我认为这是因为它试图在外部页面上执行它,因为它是一个href =“javascript:...”链接而不是普通的DOM事件。

如何在不改变LinkBut​​ton的情况下克服这个问题?有没有更好的方法来运行单击按钮所需的服务器端代码?

编辑:我添加了<a href="javascript:alert(document.title)">test</a> 并点击它,我得到了我的外页的标题,而不是我在iframe中的页面标题。

4 个答案:

答案 0 :(得分:1)

我可能没有正确地提出问题...但iframe中的链接按钮应该只在iframe上下文中正常工作。因此,iframe .aspx的代码隐藏中的任何内容都可以正常运行。

现在,如果您希望iframe中的link_button与父页面进行交互,则为nope。 您要做的是跨域方案。我怀疑你有什么方法可以完成它,这是出于安全原因。我正在寻找像asked here那样的东西。

如果您拥有这两个网站,那么您可能想要检查WebService是否有用。

答案 1 :(得分:1)

我非常好奇自己尝试一下,所以我创建了一个测试应用程序,我很容易在IFrame中获得回发。

现在稍微澄清一下如果在IFrame中发生回发,你甚至会看到帧边界内的效果(除非使用某些客户端脚本进行其他编程)。现在针对您的问题,在正常情况下,您不可能调用父__dopostback事件(但您可能希望this link看到可能在您的父页面上发生的事情)。< / p>

有时作为安全措施,会在各个IFrame上禁用javascript(此功能随HTML5一起提供)。您可能正在处理类似的情况。在这种情况下,除非您回退到简单的HTML表单并将其发布到不同的ASP.net页面,否则您无法控制其功能。

根据我们下面的讨论,我建议您在页面中使用简单的HTML超链接,除非您可以更改父页面的代码。如果需要回发,那么您可以使用跨页面发布(正如我已经提到的那样),并从该页面重定向回您当前的子页面。

其中一个代码适合您:

<a href="#" onclick="YourFormName.submit()">Link Text</a>

OR

<a href="#" onclick="document.getElementById("myForm").submit();">Link Text</a>

OR

<a href="#" onclick="document.getElementById("Iframe Name").contentWindow.document.getElementById("YourFormName".submit)">Link Text</a>

OR

<a href="#" onclick="document.getElementById("Iframe Name").contentDocument.document.getElementById("YourFormName".submit)">Link Text</a>

如果上述代码都不适合您,那么您应该考虑使用提交按钮而不是超链接。

希望这有帮助。

答案 2 :(得分:0)

同样好奇,我试图复制你的问题,但帖子在iframe中运行良好。这可能听起来很愚蠢,但你可以确认该页面在iframe之外工作吗?

其他建议:

  1. 尝试不同的浏览器
  2. 停用浏览器扩展程序
  3. 尝试使用iframe在您的网站上创建一个基本的HTML页面,看看它是否有效。这可以告诉你父页是否是罪魁祸首。

    <!DOCTYPE html>
    
    <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
    <title></title>
    </head>
    <body style="background: #ccc">
        <h1>My HTML Page</h1>
        <iframe src="http://MyWebsiteUrl" width="400" height="400" />
    </bod>
    </html>
    

答案 3 :(得分:0)

我有同样的问题。结束使用OnClick =&#34;&#34;添加asp:imgButton控件aspx.cs代码后面的处理程序。

他们点击事件调用的处理程序是我希望我的链接按钮调用的处理程序,但不会在Mac上的Safari 7.0.1中调用。我把OnClientClick =&#34;返回mylinkbuttonHandler()&#34; javascript中的客户端处理程序刚刚调用了我的隐藏(因为它们没有分配图像)imgButton的点击事件; javascript本身如下所示:

    <script language="javascript" type="text/javascript">
        // Fake out Safari by creating imgButtons that fire the linkbutton code behind events
        function saveButtonLogic() {
            var buttonId = document.getElementById("hiddenSaveButton");
            buttonId.click();
            return false;
        }
        function submitButtonLogic() {
            var buttonId = document.getElementById("hiddenSubmitButton");
            buttonId.click();
            return false;
        }
        function clearButtonLogic() {
            var buttonId = document.getElementById("hiddenClearButton");
            buttonId.click();
            return false;
        }
    </script>
嘿,它很难看,但效果很好。