如何解决错误:当应用程序未在UserInteractive模式下运行时显示模式对话框或窗体不是有效操作

时间:2012-01-19 15:28:43

标签: asp.net

我正在研究项目。在我的系统中,当我运行项目时,它运行良好,但在我检查后将其上传到我的域,然后它显示错误,如:

“当应用程序未在UserInteractive模式下运行时显示模式对话框或表单不是有效操作。指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知。”

说明:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.InvalidOperationException:当应用程序未在UserInteractive模式下运行时显示模式对话框或表单不是有效操作。指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知。

这是什么原因,我该如何解决?

请帮帮我......

感谢。

5 个答案:

答案 0 :(得分:10)

您100%可以在服务器端执行此操作...

     Protected Sub Button3_Click(sender As Object, e As System.EventArgs)
    MesgBox("Test")
End Sub

Private Sub MesgBox(ByVal sMessage As String)
    Dim msg As String
    msg = "<script language='javascript'>"
    msg += "alert('" & sMessage & "');"
    msg += "<" & "/script>"
    Response.Write(msg)
End Sub

这里实际上有很多方法可以解决这个问题http://www.sislands.com/coin70/week1/dialogbox.htm

答案 1 :(得分:9)

您无法从ASP.NET应用程序中显示 ON SERVER 对话框,当然,您可以这样做,但由于您的用户使用的是浏览器而无法看到它,因此没有任何意义在服务器上引发的消息您必须了解网站的工作原理,服务器端代码(在您的情况下为ASP.NET)在服务器上生成html,javascript等,然后浏览器加载该内容并将其显示给用户,因此为了向用户提供模态消息框用户必须使用Javascript,例如警报功能。

以下是asp.net的示例:

http://madskristensen.net/post/JavaScript-AlertShow%28e2809dmessagee2809d%29-from-ASPNET-code-behind.aspx

答案 2 :(得分:9)

可以通过添加MessageBoxOptions.ServiceNotification来解决此错误。

MessageBox.Show(msg, "Print Error", System.Windows.Forms.MessageBoxButtons.YesNo, 
   System.Windows.Forms.MessageBoxIcon.Error,     
   System.Windows.Forms.MessageBoxDefaultButton.Button1, 
   System.Windows.Forms.MessageBoxOptions.ServiceNotification); 

但是如果您的Web应用程序安装在IIS或服务器上,它将不会显示任何对话框。因为在IIS或服务器中它托管在没有任何桌面的工作进程上。

答案 3 :(得分:0)

如果以非交互模式在计划任务上运行应用程序,也会遇到此问题。

一旦显示对话框,它将引发错误:

  

当应用程序不在UserInteractive模式下运行时,显示模式对话框或窗体是无效操作。指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知。

您可以在堆栈跟踪中看到其导致问题的MessageBox:

at System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon,  MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp)  

解决方案

如果您正在按计划任务运行应用程序,请发送电子邮件而不是显示对话框。

答案 4 :(得分:-1)

对于Vb.Net Framework 4.0,U可以使用:

Alert("your message here", Boolean)

这里的布尔值可以是True或False。如果您想立即关闭窗口,则返回False如果要保持窗口打开。