如何在浏览器控制台或输出窗口中显示Console.WriteLine输出?

时间:2013-02-05 17:53:42

标签: asp.net asp.net-mvc

我在ASP.NET MVC4项目的模型中写了System.Console.WriteLine("How can I see this debugging information in a browser");。如何在浏览器控制台中或至少在Visual Studio中看到此调试字符串?我在Visual Studio的输出窗口中找不到它。也许我需要从NuGet安装一些插件?

5 个答案:

答案 0 :(得分:36)

Console.WriteLine(...)将不会显示。如果您绝对需要在调试器中查看输出,则必须使用

System.Diagnostics.Debug.WriteLine("This will be displayed in output window");

并在输出窗口中查看。您可以转到Debug -> Window -> Output

打开输出窗口

enter image description here

以下是一个示例:

enter image description here

如需进一步阅读,check out this SO post

答案 1 :(得分:21)

您可以使用以下类

从C#代码写入Javascript控制台
using System.Web;

public static class Javascript
{
    static string scriptTag = "<script type=\"\" language=\"\">{0}</script>";
    public static void ConsoleLog(string message)
    {       
        string function = "console.log('{0}');";
        string log = string.Format(GenerateCodeFromFunction(function), message);
        HttpContext.Current.Response.Write(log);
    }

    public static void Alert(string message)
    {
        string function = "alert('{0}');";
        string log = string.Format(GenerateCodeFromFunction(function), message);
        HttpContext.Current.Response.Write(log);
    }

    static string GenerateCodeFromFunction(string function)
    {
        return string.Format(scriptTag, function);
    }
}

就像它的JS版本一样,它实际上将你的消息转换为JS并将其注入页面。

答案 2 :(得分:3)

您可以使用Debug.Writeline("debug information")。它将显示在“输出”窗口中。

答案 3 :(得分:3)

除了Sam的回答,你可能会发现Response.Write很有用。在某些情况下 - 例如,当您支持传统的内联.aspx页面时 - 通过向浏览器写出可疑值来调试更方便:

String myString = GetAStringFromSomewhere();

/* What did that method actually return, anyway?
   NB: Remove this once I know! */
Response.Write(myString);

然而,这在ASP.Net MVC中不太实用,因为您的控制器将被编译。在这种情况下,您也可以使用log4net之类的内容将调试信息写入日志文件。

答案 4 :(得分:1)

感谢+ MichaelTaylor3D的解决方案,我进一步增强了它以支持ajax部分回发期间的功能。请记住添加对System.Web.Extension的引用以支持ScriptManager。

    public static class Javascript
    {
        static string scriptTag = "<script type=\"\" language=\"\">{0}</script>";
        public static void ConsoleLog(string message)
        {
            string function = "console.log('{0}');";
            string log = string.Format(GenerateCodeFromFunction(function), message);

            Page page = HttpContext.Current.Handler as Page;

            if (ScriptManager.GetCurrent(page).IsInAsyncPostBack)
            {
                ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "log", "console.log('" + message + "')", true);
            }
            else
            {
                HttpContext.Current.Response.Write(log);
            }
        }

        public static void ConsoleError(string message)
        {
            string function = "console.error('{0}');";
            string log = string.Format(GenerateCodeFromFunction(function), message);

            Page page = HttpContext.Current.Handler as Page;

            if (ScriptManager.GetCurrent(page).IsInAsyncPostBack)
            {
                ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "error", "console.error('" + message + "')", true);
            }
            else
            {
                HttpContext.Current.Response.Write(log);
            }
        }

        public static void Alert(string message)
        {
            string function = "alert('{0}');";
            string log = string.Format(GenerateCodeFromFunction(function), message);

            Page page = HttpContext.Current.Handler as Page;

            if (ScriptManager.GetCurrent(page).IsInAsyncPostBack)
            {
                ScriptManager.RegisterClientScriptBlock(page, page.GetType(), "alert", "alert('" + message + "')", true);
            }
            else
            {
                HttpContext.Current.Response.Write(log);
            }
        }

        static string GenerateCodeFromFunction(string function)
        {
            return string.Format(scriptTag, function);
        }
    }