Как показать вывод Console.WriteLine в консоли браузера или в окне вывода?

Я написал System.Console.WriteLine("How can я see this debugging information in a browser"); в модели моего проекта ASP.NET MVC4. Как я могу увидеть эту строку отладки в консоли браузера или, по крайней мере, в Visual Studio? Я не могу найти его в окне вывода Visual Studio. Может быть, мне нужно установить плагин из NuGet?

Ответ 1

Console.WriteLine(...) не будет отображаться. Если вам абсолютно необходимо увидеть вывод в отладчике, вам нужно будет использовать

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

и просмотрите его в окне Вывод. Вы можете открыть окно вывода, перейдя в Debug -> Window -> Output:

enter image description here

Вот пример того, как все это будет выглядеть:

enter image description here

Для дальнейших чтений ознакомьтесь с этим сообщением SO.

Ответ 2

Вы можете написать на свой 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 и вводит его на страницу.

Ответ 3

Вы можете использовать Debug.Writeline("debug information"). Он будет отображаться в окне "Вывод".

Ответ 4

В дополнение к ответу Сэма вы можете найти 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.

Ответ 5

Спасибо + 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);
        }
    }