21

I wrote System.Console.WriteLine("How can I see this debugging information in a browser"); in the model of my ASP.NET MVC4 project. How can I see this debugging string in the browser console, or at least in Visual Studio?. I can't find it in the output window of Visual Studio. Maybe I need to install some plugin from NuGet?

TylerH
  • 20,799
  • 66
  • 75
  • 101
Maxim Yefremov
  • 13,671
  • 27
  • 117
  • 166

5 Answers5

51

Console.WriteLine(...) will not be displayed. If you absolutely need to see output in the debugger, you'll have to use

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

and view it in the Output window. You can open the output window by going to Debug -> Window -> Output:

enter image description here

Here's an example of what this will all look like:

enter image description here

For further readings, check out this SO post.

Community
  • 1
  • 1
StoriKnow
  • 5,738
  • 6
  • 37
  • 46
24

You can write to your Javascript console from your C# Code using the following class

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

Works just like its JS version, it actually converts your message to JS and injects it into the page.

MichaelTaylor3D
  • 1,615
  • 3
  • 18
  • 32
  • I kept getting a "Newline in Constant" error, until I changed the scriptTag declaration to `static string scriptTag = " – Joe Coyle Feb 28 '19 at 13:57
  • 1
    I get this error: 'HttpContext' does not contain a definition for 'Current' – Thuy Sep 30 '22 at 17:56
7

You can use Debug.Writeline("debug information"). It will be displayed in the Output window.

Liam
  • 27,717
  • 28
  • 128
  • 190
user1797792
  • 1,169
  • 10
  • 26
4

In addition to Sam's answer, you may find Response.Write useful. In some situations - for example, when you are supporting legacy inline .aspx pages - it's more convenient to debug by writing out suspect values to the browser:

String myString = GetAStringFromSomewhere();

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

This is less practical in ASP.Net MVC, however, as your controllers will be compiled. In this case, you might as well be writing out your debugging information to a log file, using something like log4net.

Ant P
  • 24,820
  • 5
  • 68
  • 105
1

Thanks +MichaelTaylor3D for the solution, I have further enhanced it a little bit to support the function during ajax partial postback. Remember to add reference to System.Web.Extension to support 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);
        }
    }
TPG
  • 2,811
  • 1
  • 31
  • 52