我正在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