如何在C#页面中编写调试信息

本文关键字:调试 信息 | 更新日期: 2023-09-27 18:00:58

注意:之所以出现此问题,是因为页面的呈现事件被覆盖,这反过来又导致原本可见的.net错误显示改为显示垃圾,并且没有看到类中的编码错误。


我想把调试信息放在C#网页上。我制作了一个包含数组的静态类,并在代码的各个位置添加调试消息。该类有一个get方法,返回一个将所有数组元素连接在一起的字符串。在页面底部,我有:

<身体>&lt--debug=<%=debugging.get((%>--><html>
这总是把页面搞砸。整个页面显示垃圾。如果我使用文本常量,如以下内容,它可以正常工作:
<身体>&lt--debug=<%="xxx"%>--><html>
我想这可能是unicode问题或其他什么问题。我尝试过转换,但无法使其发挥作用。类别为:
using System;
public static class debugging {
  public static String[] messages;
  public static void add(String v) {
    Array.Resize(ref messages, messages.Length + 1);
    messages[messages.Length - 1] = v;
  }
  public static String get() {
    String s = "";
    for (int i = 0; i < messages.Length; i++) s += messages[i] + "'r'n";
    return s;
  }
}

我怎样才能让它发挥作用?

如何在C#页面中编写调试信息

您的类有缺陷,这可能就是您所说的得到垃圾的原因。您的message参数按原样抛出异常。这是一个工作类。

public static class debugging
{
    public static String[] messages = null;
    public static void add(String v)
    {
        if (messages == null)
            messages = new string[1];
        else
            Array.Resize(ref messages, messages.Length + 1);
        messages[messages.Length - 1] = v;
    }
    public static String get()
    {
        if (messages == null) 
           return string.Empty;
        String s = "";
        for (int i = 0; i < messages.Length; i++) s += messages[i] + "'r'n";
        return s;
    }
}

这是该类的改进版本

public static class debugging
{
    public static List<string> cMsg = new List<string>();
    public static void add(String v)
    {
        cMsg.Add(v);
    }
    public static String get()
    {
        StringBuilder sbOnMe = new StringBuilder();
        foreach (var One in cMsg)
            sbOnMe.AppendLine(One);
        return sbOnMe.ToString();
    }
}

也许将输出放在PRE标记上,而不是HMTL注释上?

</body>
<pre style="display:none;">debug=<%=HtmlUtility.HtmlEncode(Eval(debugging.get())) %></pre>
</html>

也许会这样。

返回的文本可能会干扰html或注释标记。

也许你可以试试之类的东西

<div style="display:none;"><%=debugging.get()%></div>

编辑:

你也可以尝试HTMLEncode,这可能会奏效。

<%=HttpUtility.HtmlEncode(debugging.get())%>