ASP.NET MVC 2中TEXTAREA换行符的问题

时间:2011-06-13 20:02:03

标签: asp.net-mvc-2 cross-browser textarea

我真的不认为这与ASP.NET MVC 2本身有任何关系,但我提到因为它是我正在工作的环境,至少我的问题的一个方面与MVC 2的方式有关行为方式。我的问题是:

我在表单上有一个TEXTAREA元素,允许输入多行数据。当表单回发到服务器(使用IE8)时,我可以看到数据格式为“A \ n \ rB \ n \ rC \ n \ rD”。然后,我将此数据保存到数据库表中,它以完全相同的方式显示。但是,当我稍后返回页面,从数据库加载数据并将其设置为TEXTAREA元素的值时,它将“\ n \ r”显示为文字字符而不是换行符!

作为旁注,使用ASP.NET MVC,如果我遵循标准的if (!ModelState.IsValid) return View(viewModel);方法,由于验证错误,TEXTAREA在重新呈现相同的表单时显示正常。这告诉我,问题必须与(SQL Server)数据库中持久存储和检索数据有关。

我在FireFox和Chrome中遇到了相同的显示问题,但显着不同的是,从这些浏览器提交时,数据的格式为“A \ r \ nB \ r \ n \ n \ n \ n \ n \ n \ nD”。

由于这些行为上的差异,如何处理TEXTAREA中的持久多行数据,这些数据将在所有浏览器中正确呈现?

2 个答案:

答案 0 :(得分:2)

您应该将\ r \ n char替换为
标签,并在想要渲染文本时创建MvcHtmlString,我使用:

@(MvcHtmlString.Create(Model.Text.Replace("\r\n","<br/>").Replace("\n\r","<br/>)))

Model.Text是来自TextArea的文本,我已经测试了这行代码,它在所有五种主要浏览器(IE,FF,Chrome,Opera,Safari)上都能正常工作。

答案 1 :(得分:0)

我还没有找到实际的解决方案,但已经实施了解决方案。

当我将对象的属性设置为TEXTAREA提交的值时,我在文本上执行正则表达式替换,将从浏览器返回的任何字符转换为'\ n',这似乎可以作为换行符在我检查过的所有浏览器中(IE8,Chrome&amp; FireFox)。这是我正在使用的代码(在.NET中):

cleanValue = Regex.Replace(value, "(\\n|\\\\n|\\r|\\\\r)+", "\n", RegexOptions.IgnoreCase);