2010-10-22 98 views
2

我想允许在评论框中使用HTML(最终使用tinymce或类似的东西),将其存储在MSSQL数据库中,然后将其读回页面,其中字段呈现在tabl单元格中。使用ASP.NET MVC在数据库中存储和读取HTML?

在我修复了操作方法的验证问题后,这一切都可以正常工作。但是当从数据库中读回时,它会呈现HTML标签可见的文本,而不是格式化的HTML。即如果我看的HTML源代码中的表,它是这样的:

 <td> 
      &lt;p&gt;Testing HTML&lt;/p&gt;&lt;p&gt;Hope it works&lt;/p&gt; 
     </td> 

那么,如何呈现为格式化的文本?当我这样做来验证验证时,我只是在textarea的标签中写下了。

回答

2

Professional ASP.NET MVC提供有关 “代码掘金” 的差异这样的解释:

当我们看Details.aspx 模板更加紧密,我们会发现它包含了静态HTML以及 作为嵌入式呈现代码 。当查看 模板呈现<%%>代码 冰渣执行代码,并<%:%>代码 熔核执行的代码包含在其中 然后渲染结果 到模板的输出流。

在这个描述中忽略了<%=%>中的代码块是如何工作的。 Scott Guthrie在他的文章New <%: %> Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2)中描述了这个区别。 Phil Haack在关于以Html Encoding Code Blocks With ASP.NET 4开头的HTML编码块的系列文章中更详细地讨论了这一点。

你发现的是,<%=%>将原始HTML文件输出到输出流中,而<%:%>执行HTML编码。

+0

感谢您的链接! – Anders 2010-10-23 20:28:27

0

你想HtmlDecode

为了给MSDN例如

HttpUtility.HtmlDecode方法

using System; 
using System.Web; 
using System.IO; 

    class MyNewClass 
    { 
     public static void Main() 
     { 
     String myString; 
     Console.WriteLine("Enter a string having '&' or '\"' in it: "); 
     myString=Console.ReadLine(); 
     String myEncodedString; 
     // Encode the string. 
     myEncodedString = HttpUtility.HtmlEncode(myString); 
     Console.WriteLine("HTML Encoded string is "+myEncodedString); 
     StringWriter myWriter = new StringWriter(); 
     // Decode the encoded string. 
     HttpUtility.HtmlDecode(myEncodedString, myWriter); 
     Console.Write("Decoded string of the above encoded string is "+ 
         myWriter.ToString()); 
     } 
    } 
+0

那么,我已经尝试过,但它没有奏效。但是也许我找到了答案:我用<%:item.Comment%>写出了视图中的文本。我猜想:即使我在控制器中使用了HtmlUtility.HtmlDecode,也会对其进行编码。所以如果我改为<%= item.Comment%>,它似乎工作。 – Anders 2010-10-22 10:44:00

相关问题