来自多线asp的不同换行符:完全回发与异步回发的TextBox

时间:2018-01-29 15:32:05

标签: asp.net ajax webforms newline postback

我在 MultiLine 模式下有 TextBox 文字属性包含一些换行符(\ r \ n)。

为什么在完整回发上返回服务器的数据之间存在差异 - " \ r \ n"返回 async postback - " \ n"退回了?

用户代理:IE,Firefox,Edge,Chrome

ASPX:     

awk

aspx.cs:

    <asp:UpdatePanel runat="server" ID="up">
        <ContentTemplate>

            <asp:TextBox runat="server" ID="tbText" TextMode="MultiLine" Height="200px" />

            <asp:Label runat="server" ID="lDump" /><br />
            <asp:Button runat="server" ID="btnAsync" Text="Async postback" />

        </ContentTemplate>
    </asp:UpdatePanel>

    <asp:Button runat="server" ID="btnFull" Text="Full postback" />

输出:

  • 异步回发: Line1 [LF] Line2 [LF] Line3
  • 完整回发:第1行[CR] [LF]第2行[CR] [LF]第3行

1 个答案:

答案 0 :(得分:1)

如果您正在使用Firefox / Chrome或其他使用类似Unix的LF(ASCII中为0x0A)的浏览器作为行尾,则行为是设计的,如this post中所述:

  

最常见的区别(也许唯一一个值得担心的是   约束是行以Windows上的CRLF结束,Unix上的NL(LF)和CR上结束   较旧的Mac(OS X的情况已经改变,就像Unix一样)。注意   意义从LF到NL的转换,对于完全相同的字符,   给出了Windows和Unix之间的差异。

然而,在使用Windows样式行结尾(在ASCII中为CRLF / 0x0D0A)的IE中,相同的异步回发会返回所需的结果,如下图所示:

CRLF in IE vs other browsers

提出的不同行为背后的原因是标准回发,多行textarea控件生成的TextBox使用完整的POST方法将其内容发送到服务器,并遵循Windows样式的行结束在服务器端进程中。但是在异步回发中,只有UpdatePanel的内容使用依赖于浏览器的AJAX请求进行更新。

Craig Wardman在使用类似Unix的行结尾的浏览器中证实了这种行为,并提出了一种解决方案,使用CRLF在服务器端对同步和异步回发标准化Regex.Replace的使用(参见参考资料部分)

  

在同步回发上,似乎ASP.NET修复了这个问题,你会得到   CrLf在服务器上的文本中。 然而,当你回帖时   使用AJAX异步,你只能在Firefox中获得文本中的Lf   使用。

参考文献:

Asynchronous and synchronous postback in ASP.NET

Textbox CrLf in Firefox using AJAX UpdatePanel