【问题标题】:iFrame in UpdatePanel not updatingUpdatePanel 中的 iFrame 未更新
【发布时间】:2012-09-11 16:51:11
【问题描述】:

当单击页面上的按钮时,我正在尝试更新 iFrame 的源。然而,似乎什么都没有发生……

.ASPX:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
        <ContentTemplate>
                <div class="accountInfo">
                    <p class="submitButton">
                        <asp:Button ID="ValidateButton" runat="server" Text="Validate" OnClick="SubmitSponsor" />
                    </p>
                </div>
                <iframe runat="server" id="PayPalFrame" height="150px" width="100%" frameborder="0"></iframe>
        </ContentTemplate>
    </asp:UpdatePanel>

代码隐藏:

    protected void SubmitSponsor(object sender, EventArgs e)
    {
        var driver = new Driver();
        var isvalid = driver.IsAppValid(URL.Text, APILINK, Connstring);

        if (isvalid)
        {
            PayPalFrame.Attributes.Add("src", "http://www.google.com");
            URLInvalid.Visible = false;
        }
    }

我也试过: PayPalFrame.Attributes["src"] = "http://www.google.com"; 还是什么都没有。

【问题讨论】:

  • 如果在SubmitSponsor 内设置断点,它会被命中吗?
  • 我已经有一段时间没有使用更新面板了,但您不必指出哪些按钮会触发面板更新和重新渲染吗?
  • @DaveZych 是的,它通过 SubmitSponsor 中的每个命令就好了。
  • @AnnL。不,除了更新 src 属性之外,它适用于我尝试过的任何其他方法。

标签: c# asp.net ajax webforms


【解决方案1】:

我已经测试了您的代码,它可以在示例项目中运行:

ASPX:

<form id="form1" runat="server">
<div>
    <asp:ScriptManager runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <div class="accountInfo">
                <p class="submitButton">
                    <asp:Button ID="ValidateButton" runat="server" Text="Validate" OnClick="SubmitSponsor" />
                </p>
            </div>
            <iframe runat="server" id="PayPalFrame" height="150px" width="100%" frameborder="0">
            </iframe>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

代码隐藏:

public partial class UpdatePanelIFrameTester : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void SubmitSponsor(object sender, EventArgs e)
    {
        bool isvalid = true;
        if (isvalid)
        {
            PayPalFrame.Attributes.Add("src", "http://www.ironworks.com");
        }
    }
}

我会检查您的代码并确保没有任何内容导致您的页面刷新/执行完整的回发(我更改了网址,因为在标准条件下,谷歌不允许您在 iframe 中查看它)。

【讨论】:

  • 该死的。我现在觉得有点傻。这是因为我使用 Google 进行测试。由于 iFrame 没有显示任何内容,并且当我查看页面的源代码时,没有添加 src 标签,我认为它不起作用。我将其更改为不同的 URL,它按预期工作。 *注意 - 即使按预期工作,查看页面源代码仍然没有在 iFrame 标记上显示更新的“src”属性,但没关系。谢谢!
  • 没问题,很高兴你能成功。就像以后要注意的那样,当您在浏览器上单击“viewsource”时,您不会真正看到大多数与回发相关的更改。如果您想查看当前显示的内容,可以使用开发人员工具/firebug。祝你好运!
【解决方案2】:

我相信您必须删除 src 属性,然后重新添加它,这样才能正常工作。不知道为什么会这样,但我记得上次我使用更新面板时这样做了。也许是因为 src 属性一直都已经存在?

无论如何,这里有一些示例代码:how to change the src attribute in iframe

【讨论】:

  • 这一切都很好,但是,如果您查看我上面的代码,“src”属性还不存在。因此,从理论上讲,删除它不会有任何作用。
  • 点击按钮后,如果在浏览器中查看页面源码,是否设置了src属性?
  • @r584 无论如何我都会敦促您尝试一下,看看它是否有效。如果没有,我很抱歉浪费您的时间。
  • @DaveZych nope,src 属性在我之后查看时没有显示在源代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 1970-01-01
  • 2011-11-24
  • 2018-06-05
  • 1970-01-01
相关资源
最近更新 更多