2010-08-13 62 views
1

我正在MVC 2 .net 4网站上创建一个简单的“网站新闻”功能。网站新闻文章保存在一个简单的SQL数据库中,实际上我是用Entity Framework Code First和compact sql组成的,包括colums articleID,articleDate articleSummary和articleDetail(model.ItemEntry,代码如下)。 articleDetail是一个textarea,我想用TinyMce或其他一些所见即所得编辑器编辑,如果你有替代编辑建议或建议请这么做,为什么。htmlencode TinyMce/textarea to sql MVC 2 .net 4

我正在寻找一种方法来让文章中的文本通过textarea由TinyMce输入,它可能包含html以及文本htmlencoded,因为它被记录到表格的行中。在我看来,这将是一个可能的配置选项,我没有找到它。而通过htmlencoding,textarea可以绕过我在尝试将TinyMce/textarea数据保存到sql时遇到的所有困难。

虽然我会用这个直播它主要是一种学习体验。我想要学习如何做到这一点,我有点固执。否则,我只是使用textarea,并跳过这个简单的应用程序的所见即所得。

虽然试图用TinyyMce编写简单的文本,但我遇到了.net 4和requestvalidation的问题。看起来我不得不通过在网络配置中放置<httpRuntime requestValidationMode="2.0" />来放松我的安全性并将[ValidateInput(false)]添加到我的控制器中创建发布操作。我不想放松.net 4提供的安全性,现在还不知道如何去除TinyMce/textarea中的html。

在这一点上,我发现我真正想做的事情是htmlencode文本,因为它可能有价值的文章中的一些HTML格式。博客文章和其他应用程序保存在SQL中的信息,最终会成为html,他们如何做到这一点?

总结(一些)我的问题是

  • 是否存在的HTMLEncode其内容有任何所见即所得的编辑器?这样我可以有存储在sql中的htmlencoded html新闻文章。然后,我会试图htmldecode显示新闻文章时显示。

交替

  • 如何可能我只是简化条从TinyMCE的/ textarea的的HTML之前,我保存为sql?

  • 是放宽requestValidationMode =“2.0”我唯一的解决方案?

研究资源我发现这方面的学习经验很有帮助。

Ack!无法发布他们,因为这是我的第一篇文章。啧啧,我以为我读了常见问题解答,并且正在成为一名优秀的Nerditquette人。我很喜欢在Live Writer中编写它,并且在我的博客上发布了here,其中包括我研究并找到的有用链接。

一些相关的源代码片断。

创建。ASPX

<script type="text/javascript"> 
tinyMCE.init({ 
    mode: "textareas", 
    theme: "simple" 
}); 

  <div class="editor-label"> 
      <%: Html.LabelFor(model => model.ItemEntry) %> 
     </div> 
     <div class="editor-field"> 
      <%: Html.TextAreaFor(model => model.ItemEntry) %> 
      <%: Html.ValidationMessageFor(model => model.ItemEntry) %> 
     </div> 

NewsController.cs

 // POST: /News/Create 

    [HttpPost] 
    // [ValidateInput(false)] 
    public ActionResult Create(Item item) 
    { 
     if (ModelState.IsValid) 
     { 
      siteNews.Items.Add(item); 
      siteNews.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
      return View(item); 
    } 

回答

0
  • 你为什么要的HTMLEncode您的内容只是将其保存在数据库中?这是无用的一步。
  • 如果您使用富文本编辑器,为什么要去掉html?如果只是想要文字,留在textarea。您可以将tinyMCE配置为使用bbtags,但我只会将其用于不可信任的用户。
  • 将您的requestValidationMode设置为2.0是您可以如何让您的代码保存html。没有什么不妥。
+0

我的想法是通过htmlencode发布之前,我可以绕过安全问题。 我正试图学习如何处理有和没有htmlencode的信息。 如果我将requestValidationMode设置为2.0,那么整个站点都不会删除.net 4中的安全增强项吗? – jeffa 2010-08-13 23:43:49

+0

在.net 4中,所有请求现在都已验证(Web服务/ http模块/处理程序)。因此,验证在请求发生的早期发生,运行时永远不会看到[ValidateInput(false)]属性的操作。 – ZippyV 2010-08-14 08:17:48