0

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

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();
        }
    }
}
4

3 回答 3

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 代码不起作用 - 为什么?

于 2013-01-15T15:23:00.360 回答
0

如果您使用的是 Windows 窗体,请调用此原型

public static DialogResult Show(
    IWin32Window owner,
    string text
)

并传递Process.GetCurrentProcess().MainWindowHandleIWin32Window owner.

相反,如果您使用 WPF 调用此原型

public static MessageBoxResult Show(
    Window owner,
    string messageBoxText
)

并传递Application.MainWindowowner.

于 2013-01-15T15:15:02.607 回答
-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
);

不过我不推荐它——它是一个系统模式对话框,将出现在所有其他应用程序的前面。

于 2013-01-15T15:14:26.810 回答