在我的asp.net-mvc网站上,我有一个字段,通常有一个字符串(来自数据库),但可能不时包含任何内容。
因为IE不知道如何处理css“空单元”标签,所以空表格单元格需要填充& nbsp;
我想
Html.Encode(" ");
会为我解决这个问题,但很明显,它只会返回“”。 我可以按如下方式实现这个逻辑
Html.Encode(theString).Equals(" ")?" ":Html.Encode(theString);
也是一种非速记 - 如果可能的话,但坦率地说,两种选择都很难看。 是否有更可读,更紧凑的方式将可选空间放在那里?
答案 0 :(得分:5)
将" "
转换为"\xA0"
然后无条件Html.Encode
结果可能更简单:
s = (string.IsNullOrEmpty(s) || s.Trim()=="") ? "\xA0" : s;
Html.Encode(s);
十六进制00A0
标识非中断空格的Unicode字符,这就是 
是
的等效HTML实体的原因。
如果您对数据库有任何控制权,则可以将空或单空格字段转换为此"\xA0"
值,这将完全消除该条件。
答案 1 :(得分:2)
HTML中的空格编码只是一个空间。可能看起来像一个空格,但具有不同的语义,“非破坏”意味着断行被抑制。
解决方案:每当我发现功能缺乏或出现意外行为时(例如asp:Label和HyperLink不进行HTML编码),我就会编写自己的实用程序类,就像我说的那样;)
public class MyHtml
{
public static string Encode(string s)
{
if (string.IsNullOrEmpty(s) || s.Trim()=="")
return "& nbsp;";
return Html.Encode(s);
}
}
答案 2 :(得分:0)
您必须找到一种不同的方式来填充空单元格。将空格字符HTML编码为自身是完全有效的。如果你需要它,你可以使用URL转义或滚动你自己的方法来生成内容。