2010-07-14 126 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