Dan*_*ger 3 asp.net ajax postback textbox
我有一个ASP.NET TextBox控件以及的TextMode =这是一个AJAX更新面板内使用TextBoxMode.MultiLine..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"
为什么回车丢失了,我该如何解决?
我在Firefox中使用AJAX UpdatePanel发现了Craig Wardman Textbox CrLf的博客文章,该文章描述了同样的问题.
在ASP.NET AJAX更新面板中使用MultiLine文本框时,使用Firefox(以及可能的其他浏览器)在服务器上的文本中可能会遇到回车换行问题.
Internet Explorer使用Windows样式CrLf(13 10)作为textarea中的换行符,但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");
}
Run Code Online (Sandbox Code Playgroud)
这将有效,但我对一个可以解决问题的解决方案感兴趣,而无需检查每个回发值.
编辑
此解决方案不处理多个相邻的新行.附加.Replace("\n\n", "\n\r\n")
替换是一种选择.