我有一个弹出消息框,我想要的是点击时总是弹出浏览器前面的消息框,但问题是它有时会弹出浏览器。 我可以做些什么来确保消息框总是在浏览器前弹出? 感谢。
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();
}
}
}
答案 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
传递。