问题描述
||
我真的不认为这与ASP.NET MVC 2本身有任何关系,但是我提到这是我正在使用的环境,并且至少有一个方面的问题与MVC 2的行为方式有关。我的问题是这样的:
我在允许输入多行数据的表单上有一个TEXTAREA元素。将表单发布回服务器(使用IE8)后,可以看到数据的格式为\“ A \\ n \\ rB \\ n \\ rC \\ n \\ rD \”。然后,我将这些数据保存到数据库表中,并以完全相同的方式显示。但是,当我稍后返回页面时,从数据库中加载数据并将其设置为TEXTAREA元素的值时,它将显示“ \\\ n \\ r \”作为文字字符而不是行休息!
附带说明一下,对于ASP.NET MVC,如果我遵循标准的“ 0”方法,则由于验证错误,当重新呈现相同的表单时,TEXTAREA可以正常显示。这告诉我该问题必须与持久存储数据和从(sql Server)数据库检索数据有关。
我在FireFox和Chrome中有相同的显示问题,区别在于从这些浏览器提交时,数据的格式为\“ A \\ r \\ nB \\ r \\ nC \\ r \\ nD \”。
由于这些行为上的差异,如何处理来自TEXTAREA的持久多行数据,该数据将在所有浏览器中正确呈现?
解决方法
您应该使用标记替换\\ r \\ n char并在要呈现文本时创建MvcHtmlString,我使用以下方法:
@(MvcHtmlString.Create(Model.Text.Replace(\"\\r\\n\",\"<br/>\").Replace(\"\\n\\r\",\"<br/>)))
Model.Text是来自TextArea的文本,我已经测试了这一行代码,并且在所有五种主要浏览器(IE,FF,Chrome,Opera,Safari)上都可以正常运行。
, 我还没有找到实际的解决方案,但是已经解决了。
当我将对象的属性设置为TEXTAREA的提交值时,我对文本执行正则表达式替换,以将浏览器返回的所有字符转换为\'\\ n \',这似乎可以作为换行符在我检查过的所有浏览器(IE8,Chrome和FireFox)中。这是我正在使用的代码(在.NET中):
cleanValue = Regex.Replace(value,\"(\\\\n|\\\\\\\\n|\\\\r|\\\\\\\\r)+\",\"\\n\",RegexOptions.IgnoreCase);