2011-03-29 131 views
1

我有一个奇怪的问题,我直接从数据库获取数据到数据源。数据绑定在带有链接按钮的转发器中。如何在asp.net中显示文本之间的空格c#html

我遇到的问题是数据库中的数据可能在字符串中间有多个空格,但是当显示在前端时只显示空格。想到这是标准的HTML行为来删除空格,我会假设asp.net将处理这与网页的呈现。同样发生的是,当报告导出为ex​​cel时,它只有1个空间而不是2个空间。

例子:

2位: “南非    -    开普敦”
单个空格: “南非 - 开普敦”

这是一个不相关的例子,但我的数据有现实用于多个空间。

+0

2位: “南非[空格] [空格] - [空格] [空格]开普敦”
单个空格:“南非[空格] - [空间]开普敦“ – 2011-03-29 09:56:34

+0

有没有办法做到这一点在c#中的代码自动执行此操作,以便我们不必更换所有显示的字符串? – 2011-03-29 10:02:27

回答

7

您可以用 替代的空间,就像这样:

string result = myString.Replace(" ", " "); 

这将导致HTML:

"South Africa  -  Cape Town" 

这将有两个空格正确呈现。

+0

简单而高效。 +1 – Hallaghan 2011-03-29 09:57:30

+0

嗨,谢谢你的回答,非常感谢。我正在寻找一种可以自动替代我的方法。在所有应用程序中手动更换每个列将是很多工作。 – 2011-03-29 10:08:01

+0

好吧,根据你在这里工作的情况,你可能会在某些事件(如DataBound)上遍历控件树,然后搜索并替换当前的空间。 – 2011-03-29 10:15:10

1

最终做了以下内容:

Regex spaceRegex = new Regex("\\s{2,}"); 

    //Only replace subsequent spaces, not all spaces. For example, 
    //" " (three spaces) becomes "   " (1 space, 2 non-breaking spaces). 
    MatchEvaluator matchEvaluator = delegate(Match match) 
    { 
     StringBuilder spaceStringBuilder = new StringBuilder(" "); 
     for (int i = 0; i < match.Value.Length - 1; i++) 
     { 
      spaceStringBuilder.Append("&nbsp;"); 
     } 
     return spaceStringBuilder.ToString(); 
    }; 

    return spaceRegex.Replace(server.HtmlEncode(value), matchEvaluator); 
} 
+0

相当不错!有一件事:你知道自从C#3.0开始,'delegate'快捷方式在lambda表达式中有一个新的快捷方式吗?你可以使用MatchEvaluator matchEvaluator = match => {...};' – 2011-03-30 08:08:41

相关问题