如何在MVC中写入浏览器控制台?

问题描述

我正在尝试使下面的类正常工作,但是我仍然收到一条错误消息,指出

alert!parsererrorSyntaxError:JSON中位置0 / Home / onPremTest {“ msg”:“ onPremTest消息”}}上的意外令牌

似乎在脚本结束标记中的开始符号导致了此消息。有谁知道如何格式化它,以便浏览器接受JavaScript代码并执行它?

public 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);
    //System.Web.HttpContext.Current.Response.Write("<script>alert('Test message !'); </script>");
    System.Web.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),"alert","alert('" + message + "')",true);
    } else {
      HttpContext.Current.Response.Write(log);
    }
  }

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

解决方法

该错误表示您的一个开始标签存在问题。可能也有其他事情,但这是我到目前为止所经历的。

// this create that error.
<div something </div>

// so add ">" after div
<div> something </div>
,

function中的GenerateCodeFromFunction应该对字符串使用'"(首选")。所以我稍微改变了您所有的方法:

 public class Javascript
    {
        static string scriptTag = "<script type='javascript' >{0}</script>";
        public static void ConsoleLog(string message)
        {
            string function = "console.log(\"{0}\");";
            string log = string.Format(GenerateCodeFromFunction(function),message);
          
            System.Web.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),"alert","alert('" + message + "')",true);
            }
            else
            {
                HttpContext.Current.Response.Write(log);
            }
        }

        static string GenerateCodeFromFunction(string function)
        {
            return string.Format(scriptTag,function.Replace("\"","'"));
        }
    }
}