0

今天是个好日子,

以下是我的代码的一部分

起始码
protected void Button1_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "<script>loadAdditionalInfoDialog(info1)</script>",false);

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp2", "<script>loadAdditionalInfoDialog(info2)</script>",false);
}
代码结束

loadAdditionalInfoDialog()功能将提示一个小窗口,让用户输入一些信息,然后单击“确定”按钮继续下一步。

但是,当我点击 Button1 时,我只能看到第二个RegisterStartupScript,这是loadAdditionalInfoDialog(info2)有效的,它会提示小窗口,我可以输入一些信息并单击“确定”按钮继续下一步。

因此,我不能输入第一个的信息RegisterStartupScript,即loadAdditionalInfoDialog(info1).

想请教解决方法,当我点击 Button1 时,我可以先输入 info forloadAdditionalInfoDialog(info1)然后点击“OK”按钮,然后继续输入 info for loadAdditionalInfoDialog(info2)

万分感谢。

实际上 Button1_Click 只是我为进行测试而创建的一个按钮。事实上,当我在 Repeater 中获取数据时,我只会调用 loadAdditionalInfoDialog() :

protected void btnRedeemAll_Click(object sender, EventArgs e)
    {
        foreach( RepeaterItem itm in repGiftResults.Items )
        {
            /*
            code to get all those parameter
            */
            if (pr.AdditionalFieldsEnabled == true)
                    {
                        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "<script>loadAdditionalInfoDialog(1," + pr.ID + "," + giftId + ",'" + txtQty.ClientID + "'," + tokenId + ")</script>", false);
                        
                    }
        }
    }

因此,我认为当我单击“确定”按钮时,我很难第二次调用 loadAdditonalInfoDialog(),因为我需要在转发器中获取许多参数。

4

2 回答 2

1

如果您仍在寻找执行此操作的方法。这对我有用,在您的示例中实现:

protected void Button1_Click(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "temp", "    <script>loadAdditionalInfoDialog(info1); loadAdditionalInfoDialog(info2); </script>",false);

}

我将这两个过程合并为一个,如果您需要先做一个,然后再做第二个,它可能会有所帮助

于 2013-10-09T20:52:35.987 回答
1

好吧,您的代码应该可以正常工作,只需确保您的 info1 和 info2 已定义并在 loadAdditionalInfoDialog 中修改您的逻辑。只是为了测试在里面放一个警报。你也可以在一个块中同时拨打这两个电话。

更新:这是我从您的评论中了解到您想要做的:

在您的转发器模板中添加一个隐藏字段

 <asp:HiddenField ID="hdf" runat="server" />

在您背后的代码中,您可以尝试这样的事情

        foreach (RepeaterItem item in cdcatalog.Items)
        {
            // Put your condition here like  if (pr.AdditionalFieldsEnabled == true) in my case to make it simple I'm just using the index
            if (item.ItemIndex == 1)
            {
                //Get the hidden fiels to save your parameters for the next call you can add multiple parameters 1;2;3;4 and read it using js
                HiddenField hdf = item.FindControl("hdf") as HiddenField;
                hdf.Value = "info2";
                // Pass the client ID for the hidden field so you can access it in loadAdditionalInfoDialog to retrieve parameter
                ScriptManager.RegisterStartupScript(this.Page, this.GetType(), String.Format("temp_{0}",item.ItemIndex),
                                                   String.Format("<script>loadAdditionalInfoDialog('info1',{0});</script>",hdf.ClientID),
                                                    false);
            }
        }

在您的脚本中,您可以执行以下操作:

 <script type="text/javascript">
        function loadAdditionalInfoDialog(param, hdfId) {
            // Do whatever yout want here
            var info = prompt("Please enter ", param);

            if (info != null) {
                // Do whatever you want with the info you collected 

                // This code should be in your ok click button to check whether you should call the second window.
                if (info !== undefined) {
                    loadAdditionalInfoDialog(hdfId.value);
                }
            }


        }

    </script>

我希望这会有所帮助。

于 2013-06-10T08:31:19.970 回答