【问题标题】:doPostBack from C# with JavaScript使用 JavaScript 从 C# 执行 doPostBack
【发布时间】:2011-05-27 15:27:46
【问题描述】:

您好,我有一个打开弹出窗口的父页面,用户在子弹出页面上进行了一些更改,然后单击保存按钮。 当用户点击保存按钮时,我想要做PostBack到父页面,这样在弹出窗口中所做的更改可以在父窗口中看到。

问题:我怎样才能实现上述场景?

我想在aspx.cs文件中写脚本代码,我试过了

string script = "";
script = "<script>window.opener.__doPostBack('UpdatePanel1', '')</script>";
ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);

但这并没有做任何事情,没有错误只是什么都没有。

我是 JavaScript 新手,需要所有步骤的帮助。

【问题讨论】:

  • 你不需要脚本标签,当你调用 ScriptManager.RegisterClientScriptBlock(...) 时有一个布尔参数来包含它们

标签: c# javascript asp.net dopostback


【解决方案1】:

父页面:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <div>
            <asp:Literal runat="server" ID="ChildWindowResult" />
        </div>
        <hr />
        <input type="button" value="Open Dialog" onclick="window.open('MyDialog.aspx', 'Dialog');" />
        <asp:Button ID="HiddenButtonForChildPostback"  runat="server"
            OnClick="OnChildPostbackOccured" style="display: none;" />
        <asp:HiddenField runat="server" ID="PopupWindowResult"/>
    </ContentTemplate>
</asp:UpdatePanel>

MyDialog 页面:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"></script>
<script type="text/javascript">
    function postData() {
        var resultField = $("input[type='hidden'][id$='PopupWindowResult']", window.opener.document);
        var parentPosDataButton = $("[id$='HiddenButtonForChildPostback']", window.opener.document);

        resultField.val($("#<%= SomeValueHiddenField.ClientID  %>").val());
        parentPosDataButton.click();
    }
</script>

<asp:TextBox runat="server" ID="SomeValueHiddenField" />
<asp:Button runat="server" OnClick="PostData" Text="Click Me" />

protected void PostData(object sender, EventArgs e)
{
   SomeValueHiddenField.Value = DateTime.Now.ToString();
   ClientScript.RegisterStartupScript(this.GetType(), "PostData", "postData();", true);
}

但我相信在这里使用一些弹出控件会更好,例如来自 AjaxControlToolkit 库的 PopUpExtender 或来自 jQuery-UI 的对话框。

【讨论】:

    【解决方案2】:

    你可能需要使用ClientID:

    string script = "";
    script = "<script>window.opener.__doPostBack('" + UpdatePanel1.ClientID + "', '')</script>";
    ScriptManager.RegisterClientScriptBlock(Literal1, typeof(Literal), "yenile", script, true);
    

    【讨论】:

    • 嗯......老实说,我没有阅读整个问题,我只是看到了你的__doPostBack 并且在 ASP.NET 中它破坏了 runat="server" 控件的 ID,所以你总是在__doPostBack中使用完整的ClientID。
    • 为什么不直接在弹出窗口的代码隐藏中执行UpdatePanel1.update();
    • Scott 我认为你遗漏了一些东西,我正在尝试在子页面(弹出页面)中回发到父页面的更新面板。此外,我会尝试感谢。
    • __do PostBack 中的控件 id 需要使用 UniqueID,而不是 ClientID。
    • @Ray 感谢雷先生,我必须承认我在 JavaScript 方面是个菜鸟。
    【解决方案3】:

    最后一个参数是是否包含脚本标签

    所以,如果你这样做了

    RegisterClientScriptBlock(page,type, "<script>foo();</script>", true);
    

    你最终会得到:

    "<script><script>foo();</script></script>"
    

    因此,将最后一个参数更改为 false,或者更好的是,删除字符串中的标签

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2019-07-16
      相关资源
      最近更新 更多