消息框在浏览器后面运行

时间:2013-01-15 14:52:42

标签: c# asp.net

我有一个弹出消息框,我想要的是点击时总是弹出浏览器前面的消息框,但问题是它有时会弹出浏览器。 我可以做些什么来确保消息框总是在浏览器前弹出? 感谢。

protected void Button1_Click(object sender, EventArgs e)
{
    string appointmentdate = Convert.ToString(DropDownListDay.Text + "-" + DropDownListMonth.Text + "-" + DropDownListYear.Text);
    string appointmenttime = Convert.ToString(DropDownListTime.Text);


    using (SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"))
    {
        con.Open();
        SqlCommand data = new SqlCommand("Select COUNT(*) from customer_registration where adate='" + appointmentdate + "'AND atime='" + appointmenttime + "'", con);
        Int32 count = (Int32)data.ExecuteScalar();
        if (count == 0)
        {
            SqlConnection con1 = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("UPDATE customer_registration SET servicetype = @servicetype, comment = @comment, adate = @adate, atime = @atime where username='" + Session["username"] + "'", con1);
            con1.Open();

            cmd.Parameters.AddWithValue("@servicetype", DropDownListServicetype.Text);
            cmd.Parameters.AddWithValue("@comment", TextBoxComment.Text);
            cmd.Parameters.AddWithValue("@adate", DropDownListDay.Text + "-" + DropDownListMonth.Text + "-" + DropDownListYear.Text);
            cmd.Parameters.AddWithValue("@atime", DropDownListTime.Text);
            cmd.ExecuteNonQuery();

            con1.Close();
            Response.Redirect("MakeAppointmentSuccess.aspx");
        }
        else
        {
            MessageBox.Show("This appointment is not available. Please choose other date & time.");
            con.Close();
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您正在将Win32消息框与ASP.NET的Response.Redirect混合使用。由于这篇文章标记为ASP.NET并且您正在调用Response.Redirect,我假设这是一个ASP.NET应用程序,而不是WinForms或WPF应用程序。

正在发生的事情是消息框弹出“服务器”,而浏览器是“客户端”,在开发者机器上是同样的事情。永远不要从ASP.NET应用程序调用MessageBox.Show。原因是您看到的消息框不是来自浏览器,一旦您将其部署到真正的服务器,客户端将永远不会看到消息框,您的服务器可能会或可能不会充满消息框窗口(取决于用户正在运行以及权限是什么。)

要在浏览器中创建“MessageBox”样式的警报,您必须使用JavaScript alert()函数。您可以在浏览器呈现的HTML(ASPX)或JS文件上执行此操作,也可以通过调用ScriptManager.RegisterStartupScript执行此操作。有关详细信息,请查看此SO问题的答案:ScriptManager.RegisterStartupScript code not working - why?

答案 1 :(得分:-1)

你可以使用接受IWin32Window作为第一个参数的MessageBox.Show()的重载吗?您应该能够将“this”作为第一个参数传递:

MessageBox.Show(this, "This appointment is not available. Please choose other date & time.");

我怀疑这不会有帮助,因为如果省略该参数,它应该选择当前活动的父窗口......

如果你绝对绝望,你可以这样做:

MessageBox.Show
(
    "This appointment is not available. Please choose other date & time.",
    Application.ProductName,
    MessageBoxButtons.OK,
    MessageBoxIcon.Information,
    MessageBoxDefaultButton.Button1,
    MessageBoxOptions.DefaultDesktopOnly
);

我不推荐它 - 它是一个系统模式对话框,将在每个其他应用程序前面。

答案 2 :(得分:-1)

如果您使用的是Windows窗体调用this prototype

public static DialogResult Show(
    IWin32Window owner,
    string text
)

并将Process.GetCurrentProcess().MainWindowHandle作为IWin32Window owner传递。

相反,如果您正在使用WPF调用this prototype

public static MessageBoxResult Show(
    Window owner,
    string messageBoxText
)

并将Application.MainWindow作为owner传递。