我正在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);
}
我的想法是通过htmlencode发布之前,我可以绕过安全问题。 我正试图学习如何处理有和没有htmlencode的信息。 如果我将requestValidationMode设置为2.0,那么整个站点都不会删除.net 4中的安全增强项吗? – jeffa 2010-08-13 23:43:49
在.net 4中,所有请求现在都已验证(Web服务/ http模块/处理程序)。因此,验证在请求发生的早期发生,运行时永远不会看到[ValidateInput(false)]属性的操作。 – ZippyV 2010-08-14 08:17:48