【问题标题】:How to resolve Error : Showing a modal dialog box or form when the application is not running in UserInteractive mode is not a valid operation如何解决错误:当应用程序未在 UserInteractive 模式下运行时显示模式对话框或表单不是有效操作
【发布时间】:2012-01-19 15:28:42
【问题描述】:

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

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

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

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

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

请帮帮我...

谢谢。

【问题讨论】:

  • 为什么你不会在 web 服务器 上从 asp.net 应用程序中显示模式对话框?!?
  • 是删除的构象???

标签: asp.net


【解决方案1】:

这个错误可以通过添加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 或服务器中,它托管在没有任何桌面的工作进程上。

【讨论】:

  • 当我尝试时错误消息消失了,但消息框从未出现。
【解决方案2】:

你 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

【讨论】:

  • 如果你要对我投反对票,至少告诉我为什么。我知道这是可行的,因为我以这种方式进行了一些调试。
  • 反对票很可能是因为人们永远不应该通过连接未知字符串来构建 html。这是一个 XSS 漏洞,通常是一种糟糕的风格。即,当您的字符串包含撇号时,您的脚本(可能是故意的)被破坏了。 xkcd.com/327
【解决方案3】:

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

这是 asp.net 的示例:

https://www.madskristensen.net/blog/javascript-alertshow(e2809dmessagee2809d)-from-aspnet-code-behind/

【讨论】:

  • 我的情况差不多。我正在做一个 ajax 调用 kfrom javascript 并从 conrtroller c# (System.Windows.Forms) 打开一个 folderBrowserDialog 并且它在我的机器上工作。打包和部署后,它在问题中给出了相同的错误。对此有什么想法吗? stackoverflow.com/questions/47544635/…
【解决方案4】:

如果您在非交互模式下在计划任务上运行应用程序,也会遇到这种情况。

只要你显示一个对话框,它就会抛出错误:

当应用程序未在 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)  

解决方案

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

【讨论】:

    【解决方案5】:

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

    Alert("your message here", Boolean)
    

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

    【讨论】:

    • 从来没有人要求提供 C# 代码。但是,Alert.Show(...) 适用于 C#。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多