问题是这样的:
我现在需要a.aspx点击按钮,弹出b.aspx模态页面。
我的做法是这样的:
a.aspx
页面中的js代码
<script language="javascript">
    function Redirect(ID) {
        if (window.showModalDialog("ModalDialog.aspx?id=" + ID, "window", "status=no;dialogWidth=700px;dialogHeight=350px;menu=no;resizeable=yes;scroll=yes;location=no") == "exit") {
            window.location.reload();
        }
    }
</script>
<asp:Button ID="btn_upd" runat="server" Text="修改信息" onclick="btn_upd_Click"  />
后台的修改按钮事件:
protected void btn_upd_Click(object sender, EventArgs e)
{
   ......//省略需要验证的相关操作
   this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')");
}b.aspx 
页面中的js代码
<script language="javascript">
    function Redirect()
    {
        window.returnValue = 'exit';
        self.close();
    }
</script>现在问题是:窗口是可以弹出来的,但是需要点击两次修改按钮才能弹出模态窗口。
跟踪代码后发现:第一次 this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')"); 这句是运行过的,但是没有执行操作。点击第二次没有运行代码,模态窗体就直接弹出来了。
请问高手们这是哪里的问题呀?应该怎样修改才能够点击一次就直接弹出窗体呢???
感激不尽,希望大家能够帮帮我

解决方案 »

  1.   

    protected void btn_upd_Click(object sender, EventArgs e) 

      ......//省略需要验证的相关操作 
      this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')"); 

    这句应该放在Page_Load吧你没点击这个按钮之前,这个this.btn_upd根本没有onclick的属性
    你第一次点击只是赋予它这个属性
    第二次点击才真正地出发JavaScript的Redirect方法,
    当然,第二次同时再一次执行了赋予属性的代码……
      

  2.   

    给btn注册JS
    把this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')"); 
    放在Page_Load里
    就像楼上说的那样
    程序刚开始运行就赋予btn JS方法
      

  3.   

    点击第一次才添加onclick事件
    if(!IspostBack)
    {
    this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')"); 
    }或使用OnClientClick
      

  4.   

    真是很感激大家的回答
    大家说的这个我在新增的时候就是那样做的,在Page_Load里面加载了
    if(!Page.IsPostBack)
    {
       this.btn_add.Attributes.Add("onclick", "Redirect('0')");
       //这里加载修改的话,这个id没有办法获得呀???
       this.btn_upd.Attributes.Add("onclick", "Redirect('" + id + "')");
    }
    可是我修改的时候,Redirect('0')这个JS方法我是需要把GridView中修改行的ID传过去的,没有办法在Page_Load里面加载呀!这个应该怎样处理呀???还有麻烦大家看看,我删除的时候需要弹出确认删除的提示,我是这样做的:
    <asp:Button ID="btn_del" runat="server" Text="删除类型" onclick="btn_del_Click" OnClientClick="return confirm('确认要删除吗?')" />
    这个框弹出来了,只是一点删除按钮他就出来了,因为我还需要判断有没有选中复选框,有没有选中要删除信息的验证,所有想把确定删除信息这个框弹在其他验证的后面。我是小菜,希望大家别嫌烦哦!
    非常感激大家的帮助,请帮帮我谢谢
      

  5.   

     function DeleteQuestions()
            {
                var flag = false;
                var inputs = document.getElementsByTagName("INPUT")
                for (var i = 0; i < inputs.length; i++)
                {//grwQuestions 为gridview的id,CheckBox2选中框id
                    if (inputs[i].type == "checkbox" && inputs[i].id.indexOf("grwQuestions") >= 0 && inputs[i].id.indexOf
    ("CheckBox2") >= 0 && inputs[i].checked)
                    {
                        flag = true;
                    }
                }
                if (!flag)
                {                alert("****!");  //没选中
                }
                else
                {
                    if (confirm('是否确定删除选中的**?'))
                    {
                        __doPostBack("后台删除事件", "");
                    }
                }
            }
      

  6.   

    第一个问题 你可以使用如下方法: ScriptManager.RegisterStartupScript(this, this.GetType(), "click", "Redirect('" + id + "');", true);
      

  7.   

    可以js转页的时候在 
    将id一参数的方式 传值~~
      

  8.   


        <script language="javascript" type="text/javascript">
            function CheckSelected() {
                var Tab = document.getElementById("MainTable");//table 的ID
                var chks = Tab.getElementsByTagName("input");//table 中的Input ID 为IDS
                if (chks == null)
                    return false;            for (i = 0; i < chks.length; i++) {
                    if (chks[i].type == "checkbox"
                && chks[i].id == "IDs"
                && chks[i].checked) {
                        return true;
                    }
                }
                return false;
            }        function DeleteOneProduct(tempID) {
                if (confirm("您确认删除所选?")) {
                    window.location.href = 'ResearchList.aspx?EditID=' + tempID + '';
                }
            }        function OnDelete() {
                if (!CheckSelected()) {
                    alert("请选择目标后再删除!");
                    return false;
                }
                if (!confirm("确定删除选定项?")) {
                    return false;
                }
            }               
        </script>
      

  9.   

    非常感谢 Lovely_baby 和 liu2835993 的回答。
    可是我的复选框是在GridView中的,
    <asp:TemplateField>
                    <HeaderTemplate>
                        <asp:CheckBox ID="cbx_All" runat="server" Text="全选" AutoPostBack="True" oncheckedchanged="cbx_All_CheckedChanged" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="cbx_Items" runat="server" Text=" " />
                    </ItemTemplate>
    </asp:TemplateField>
    这样应该怎样来判断复选框的选中状态呢???如何在后台判断有选中的复选框时,提示"是否删除",
    选择"是"后进行删除操作,"否"的话操作取消???
    麻烦大家在帮我解答一下这个删除,解决了就结贴了。
    非常感谢大家,谢谢