2016-08-04 43 views
-1

注意:出现此问题的原因是页面的渲染事件被覆盖,这反过来又导致了.net错误显示,而该显示将显示为反而显示垃圾,并且没有看到班上的编码错误。如何在C#页面中编写调试信息


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

 
     </body> 
    <!--debug=<%=debugging.get()%> --> 
    </html> 
这总是搞砸了页面。整个页面显示垃圾。如果我使用如下的文本常量,它可以正常工作:
 
     </body> 
    <!--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; 
    } 
} 

我该如何得到这个工作?

+0

的改进版本,如果我使用任何代码<% and %>之间的一切,如落入代码,并使用的Response.Write,页面始终显示垃圾桶。使用常量是可以的,但没有变量。不过,我能够显示连接字符串。 – subjectivist

+0

我尝试使用小写字符串而不是类中的字符串。 .ConnectionStrings的信息[zz] .ConnectionString表示返回一个小写字符串。没有不同。不过,我可以使用<%= .ConnectionString%>。 – subjectivist

+0

你不应该把你的类放在'System'命名空间中。使用你自己的名字空间。常用格式包括“MyCompany.MyProject”,“MyProject”和“MyCompany.MyProject.MySubproject”。 – mason

回答

1

你的课是越野车,可能这就是你说垃圾的原因。您的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(); 
    } 
} 
+0

这个班没有什么问题。这是一个简单的理由。问题发生在任何类型的变量使用的页面上,无论该类是否被使用。 – subjectivist

+0

@subjectivist但是我在本地制作一个页面并对其进行测试,它现在按照您的工作原理工作 - 它的抛出错误 - 然后我做出来并测试它并找到工作,页面不会中断。 – Aristos

+0

@subjectivist它不简单,它的越野车和复杂。我做的很简单。 – Aristos

0

返回的文本可能与html或注释标记混淆。

也许你可以尝试这样

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

编辑:

您也可以尝试的HTMLEncode可能做的伎俩。

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

+0

没有区别。 – subjectivist

0

也许把输出上的PRE标签,而不是一个HMTL有何评论?

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

MAYBE它可以这样工作。

+0

这也行不通。对变量或函数的任何引用都会导致页面显示垃圾。 – subjectivist

相关问题