【问题标题】:Problems with TEXTAREA line breaks in ASP.NET MVC 2ASP.NET MVC 2 中的 TEXTAREA 换行问题
【发布时间】:2011-06-13 20:02:02
【问题描述】:

我真的不认为这与 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\nC\r\nD”。

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

【问题讨论】:

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


    【解决方案1】:

    你应该用
    标签替换 \r\n char 并在你想要渲染文本时创建一个 MvcHtmlString,我使用这个:

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

    Model.Text 是来自 TextArea 的文本,我已经测试了这行代码,它在所有五种主流浏览器(IE、FF、Chrome、Opera、Safari)上都运行良好。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-06-03
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多