【问题标题】:Carriage Return (ASCII chr 13) is missing from textbox postback values when used within an ASP.NET Update panel在 ASP.NET 更新面板中使用时,文本框回发值中缺少回车符(ASCII 字符 13)
【发布时间】:2011-04-30 12:20:41
【问题描述】:

我有一个在 AJAX 更新面板中使用的带有 TextMode = TextBoxMode.MultiLine 的 ASP.NET 文本框。 .Text 值已预设为包含多行的值。

当使用 Chrome(7.0.517.41) 或 Firefox(3.6.11) 处理服务器上回传值的控件时,如果用户没有编辑预设值,则回车将丢失。

例如 页面加载时设置的初始 .Text 值:

“第 1 行/r/nline2/r/nline3”

从用户编辑文本框的 Chrome 或 Firefox 回发的 .Text 值:

“第 1 行/r/nline2/r/nline3”

用户未编辑文本框的 Chrome 或 Firefox 回发时 .Text 的值:

“第 1 行/nline2/nline3”

为什么回车会丢失,我该如何解决?

【问题讨论】:

    标签: asp.net ajax textbox postback


    【解决方案1】:

    我发现 Craig Wardman Textbox CrLf in Firefox using AJAX UpdatePanel 的一篇博文描述了同样的问题。

    在 ASP.NET AJAX 更新面板中使用 MultiLine 文本框时,您可能会在使用 Firefox(以及可能的其他浏览器)的服务器上的文本中遇到回车换行问题。

    Internet Explorer 使用 Windows 样式 CrLf (13 10) 作为文本区域中的换行符,但 Firefox 仅使用 Unix 样式 Lf (10)。

    在同步回发时,似乎 ASP.NET 解决了这个问题,您将在服务器上的文本中获得 CrLf。但是,当您使用 AJAX 异步回发时,只有在使用 Firefox 时才能在文本中获得 Lf。

    他提出的解决方案是解决服务器端的问题:

    public static string CleanUnixCrLf(string textIn)
    {
       //firefox only uses Lf and not CrLf
       return System.Text.RegularExpressions.Regex.Replace(textIn, "([^\r])[\n]", "$1\r\n");
    }
    

    这可行,但我对可以解决问题而无需检查每个回发值的解决方案感兴趣。

    编辑

    此解决方案不处理多个相邻的新行。 将.Replace("\n\n", "\n\r\n") 附加到另一个替换是一种选择。

    【讨论】:

    • 考虑到你应该清理用户输入,这似乎是一个很好的解决方案。
    • 触摸@travis-gockel。尽管如此,无论用户浏览器和回发方法如何,从 TextBox.Text 属性中获得一些一致性还是不错的。
    • @DanielBallinger 同意,不一致肯定是 Microsoft ASP 错误(此时至少 10 年以上)。如果浏览器应该收到 \n 而不是 \r\n (这对我来说似乎很可疑 - 因为外观相同但字符数完全不同),那么它肯定需要它来进行整页加载和更新面板更新/回传?
    【解决方案2】:

    较早的答案对我们的应用程序不太适用 - 替换字符明显显示并添加到多行 asp:textbox 的字符数(长度)中 - 但以下变体对我们有用(在 VB 中) :

    txbTextMessage.Text = Regex.Replace(txbTextMessage.Text, "\n\n", vbCrLf & vbCrLf)
    txbTextMessage.Text = Regex.Replace(txbTextMessage.Text, "([^\r])[\n]", "$1" & Environment.NewLine)
    

    顶线涉及其他受访者描述的\n\n\n\n问题。

    顺便说一句,那些使用 C# 的人可能会发现 Environment.NewLinevbCrLf 的有用替代方案;它们在所有环境中并不完全相同,但在上述代码中可以互换使用。

    也许对某人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      相关资源
      最近更新 更多