Html编码导致Chrome中出现新行

时间:2012-04-07 18:00:01

标签: c# asp.net html asp.net-mvc html-encode

在我的注册表单中,我使用asp.net unobtrusive验证来检查用户名是否存在。如果发现冲突,我的JsonResult方法返回以下内容:

This is already in use. How about \u003cstrong\u003efoo123\u003c/strong\u003e?

我使用Microsoft的不显眼的验证在我的视图中显示:

@Html.ValidationMessageFor(m => m.Username)

导致它在页面源中显示如下:

This is already in use. How about
<strong>foo123</strong>
?

如您所见,文本分为三行。这在Firefox中不是问题,但在Chrome中,这些新行会导致显示的文本以与<br />类似的方式中断。我认为编码应该归咎于此 - 任何人都能解释为什么吗?这个问题有什么解决方案吗?

提前谢谢。

3 个答案:

答案 0 :(得分:0)

如果它们在实际页面上显示换行符,那么我要做的第一件事是检查<strong/>标记并查看是否有任何CSS将其定义为display:block;或覆盖{{1属性。

如果您担心DOM浏览器的输出......这就是Chrome显示DOM树的方式。这三行是每个单独的节点(2个文本节点和一个元素节点),因此它们被视为相等。如果你检查我答案的第一段,你会看到同样的事情。

答案 1 :(得分:0)

如果没有尝试过,你可以尝试用......替换字符串中的换行符吗?

@Html.ValidationMessageFor(m => m.Username).ToString().Replace(Environment.NewLine, "");

感觉非常奇怪,因为它只是在Chrome中,仔细检查CSS规则。或者只是在p-tag中包围验证消息?

答案 2 :(得分:0)

尝试用css调整。

 \u003cdiv\u003e 
  This is already in use. How about \u003cstrong\u003efoo123\u003c/strong\u003e?
\u003c/div\u003e?

我认为这是由于一些填充问题。上传生成的页面Html代码。