2010-07-14 91 views
0

我有一個MVC 2.0應用程序,它接受來自textarea的多行輸入,然後在其他地方顯示文本。我想至少保留段落。處理textarea輸入以保留段落

目前我使用表單的TextArea助手,然後Html.Encode的價值時,我輸出它。

// form view 
<%: Html.TextAreaFor(model => model.Text, new { cols = 80, rows = 20 })%> 

// display view 
<div><%: Model.block.Text %></div 

當然,這僅僅是不夠的。的

first line 

second line 

輸入被渲染爲

<div>first line 

second line</div> 

出現爲 '第一行第二行'。不理想。

據我所知,我可以自己插入p標籤到文本中,甚至讓用戶輸入它們。但是,在這種情況下,我將不得不禁用HtmlEncode顯示頁面,似乎有問題,對不對?是否真的沒有比手動去除文本中所有標籤,然後調用HtmlEncode,然後添加p標籤,然後禁用視圖自動編碼更好的方法?

從本質上講,我聽過這個論壇上的人們提到所見即所得的編輯器,比如TinyMCE,用於textarea輸入。到目前爲止,我沒有看到這將如何解決問題。編輯不會對輸入做可靠的衛生處理,但會再次要求我在顯示頁面上刪除HtmlEncoding。我再一次面臨從零開始編寫複雜的消毒劑,或者直接刪除所有標籤,包括a和圖像,直到奇特的WYSIWYG編輯器變得完全沒有意義。

回答

0

你可以HTML編碼的文本,然後應用<p>標籤

<%= "<p>" + Html.Encode(Model.block.text).Replace("\n", "</p><p>") + "</p>" %> 
+0

這將工作,雖然它有點太侵略我的目的。我不想打破每換行,只是在每一個空白換行符(多個新行)。

第一行\ n 第二線

\ n \ n

第三線

\ n 我想這意味着我需要一個稍微複雜的匹配邏輯尋找類似於'([\ f \ r \ t \ v] * \ n){2,}「的東西,那麼它應該可能位於控制器或幫助器部分的某處而不是視圖本身 I'我會看看前趨於Html.Encode接受一個可選的add_paragraphs值。 – duffy 2010-07-16 06:43:54

0

你能不能帶斷點的元素替換所有換行符\n<br />使用類似...

string output = Model.block.Text.Replace ("\n", "<br />"); 
+0

確定。但爲了獲得理想的效果,我必須在顯示頁面上禁用Html.Encode,這意味着確保文本不包含惡意代碼成爲我的責任。我錯過了什麼嗎? – duffy 2010-07-14 12:53:45

+0

嗯...我還沒有做過那麼多的Asp.NET MVC,所以我不確定這個:(對不起 – 2010-07-14 13:59:45