ASP.NET下拉列表,第一次单击后按钮功能未触发

时间:2010-03-11 21:39:56

标签: c# asp.net

ASP.Net Dropdownlist,在更改下拉列表的值并单击按钮时,它不会向New.aspx发送upadted值

  

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="ddl_test" runat="server" OnSelectedIndexChanged="ddl_test_SelectedIndexChanged" AutoPostBack="true">
        <asp:ListItem>First Item</asp:ListItem>
            <asp:ListItem>Second Item</asp:ListItem>
            <asp:ListItem>Third Item</asp:ListItem>

        </asp:DropDownList>
        <asp:HiddenField ID="hdf_ddl" runat="server" />
        <asp:Button ID="btn_test" runat="server" Text="Button" OnClick="Button1_Click" />
    </div>
    </form>
</body>
</html>



using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

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

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string passValue = ddl_test.SelectedValue.ToString();
        string val = hdf_ddl.Value.ToString();
        btn_test.Attributes.Add("onclick", "window.open('New.aspx?ddlValue=" + val + "', 'OpenPopWindow','left=250,top=100,width=500,height=500,toolbar=1,resizable=0,status=0,menubar=0,scrollbars=1');return false;");
        //btn_test.OnClientClick = "window.open('New.aspx?ddlValue=" + val + "', 'OpenPopWindow','left=250,top=100,width=500,height=500,toolbar=1,resizable=0,status=0,menubar=0,scrollbars=1');return false;";


    }
    protected void ddl_test_SelectedIndexChanged(object sender, EventArgs e)
    {

        hdf_ddl.Value = ddl_test.SelectedValue.ToString();
    }
}

5 个答案:

答案 0 :(得分:1)

首先,注释掉OnClientClick的分配。

其次,如果您希望按钮在选择后显示该值,请在ddl_test_SelectedIndexChanged事件中注册OnClientClick。

答案 1 :(得分:0)

如果您想在第一个按钮点击后打开新窗口,则应该在Button1_Click方法中注册onclick事件处理程序,因为只有在单击按钮后才会执行Button1_Click。您可以修改页面加载方法:

protected void Page_Load(object sender, EventArgs e)
{
    string val = hdf_ddl.Value.ToString();
    btn_test.Attributes.Add("onclick", "window.open('New.aspx?ddlValue=" + val + "',  OpenPopWindow','left=250,top=100,width=500,height=500,toolbar=1,resizable=0,status=0,menubar=0,scrollbars=1');return false;");
}

但更好的方法是做你想要的是避免在下拉选择上回发并在客户端实现新的窗口打开。

答案 2 :(得分:0)

您可以通过registerstartupscript方法将windowopen功能发送到页面。

答案 3 :(得分:0)

移动以下代码:

btn_test.Attributes.Add("onclick", "window.open('New.aspx?ddlValue=" + val + "', 'OpenPopWindow','left=250,top=100,width=500,height=500,toolbar=1,resizable=0,status=0,menubar=0,scrollbars=1');return false;");

到您的Page_Load事件

答案 4 :(得分:0)

您要做的是在回发发生后打开弹出窗口。这可以通过使用将脚本注入页面来执行。基本上,您使用ClientScriptManager.RegisterClientScriptBlock并使用该方法注入弹出窗口脚本。另外,请确保我认为包含脚本标记的最后一个参数为true,这将在JavaScript代码注入页面后立即执行脚本。

更新:

以下是实施:

protected void Btn1_Click(object sender, EventArgs e)
{
    string script =
        "window.open('New.aspx','OpenPopWindow','width=500,height=500');";

    ClientScriptManager clientScriptManager = Page.ClientScript; 

    if(!clientScriptManager.IsClientScriptBlockRegistered("OpenWindow"))
    {
        clientScriptManager.RegisterClientScriptBlock(typeof(_Default), "OpenWindow", script, true);     
    }


}