我在 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" />
输出:
答案 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中,相同的异步回发会返回所需的结果,如下图所示:
提出的不同行为背后的原因是标准回发,多行textarea
控件生成的TextBox
使用完整的POST
方法将其内容发送到服务器,并遵循Windows样式的行结束在服务器端进程中。但是在异步回发中,只有UpdatePanel
的内容使用依赖于浏览器的AJAX请求进行更新。
Craig Wardman在使用类似Unix的行结尾的浏览器中证实了这种行为,并提出了一种解决方案,使用CRLF
在服务器端对同步和异步回发标准化Regex.Replace
的使用(参见参考资料部分)
在同步回发上,似乎ASP.NET修复了这个问题,你会得到 CrLf在服务器上的文本中。 然而,当你回帖时 使用AJAX异步,你只能在Firefox中获得文本中的Lf 使用。
参考文献: