请查看以下ASP.NET代码:
<%@ Page Language="C#" %>
<!doctype html>
<html>
<head>
<title></title>
</head>
<body>
<p><%Response.Write("This is sentence 1.");%> <%Response.Write("This is sentence 2.");%></p>
</body>
</html>
我希望它通过将两个字符串连接在一起来构建一个短段落,它们之间有一个空格(请注意<%Response.Write("This is sentence 1.");%>
和<%Response.Write("This is sentence 2.");%>
之间的白色字符)。但是,我从IIS 7.5获得的输出HTML是:
<!doctype html>
<html>
<head>
<title></title>
</head>
<body>
<p>This is sentence 1.This is sentence 2.</p>
</body>
</html>
两个句子之间不包含空格。有趣的是,如果我将空格放在第二句中:
<%@ Page Language="C#" %>
<!doctype html>
<html>
<head>
<title></title>
</head>
<body>
<p><%Response.Write("This is sentence 1.");%><%Response.Write(" This is sentence 2.");%></p>
</body>
</html>
然后继续HTML。但是我希望白色空间在构建组合的代码中,而不是在它工作的数据中,因为我不知道,当我写单个句子时,哪些将进入段落或什么顺序。
这是预期的行为,还是我做错了什么?
更新:
VDWWD指出了一个有趣的评论;如果我使用<%="..."%>
而不是<%Response.Write("...");%>
,则确实会将空格转移到HTML上。但是这让我更加抓狂了,因为这适用于我上面发布的简化测试用例,但不是我的实际用例看起来更像是这样:
...
<p><%=TextoWeb("Ponencias", "QuieresSubirTuPonencia?")%><%
var InicioPonencias = Sesión.ElementoTimelinePorNombre("INICIO PONENCIAS");
if (DateTime.Today < InicioPonencias.Fecha) {
%> <%=TextoWeb("Ponencias", "TextoAntesAperturaPonencias", InicioPonencias.Fecha.ToLongDateHtml(Sesión.Cultura))%><%
}
%></p>
...
请原谅西班牙语和非标准扩展名。函数TextoWeb
根据所构建页面的语言按类别和名称检索一些本地化文本,Sesión.ElementoTimelinePorNombre
按名称检索一些时间轴项目,.ToLongDateHtml(System.Globalization.CultureInfo)
执行某些特定于语言的高级格式化日期添加像序数指标的东西。这段特定代码的目的是在现有段落中添加一个句子,但前提是当前日期早于特定日期。
问题是我使用的是<%=(...)%>
而不是<%Response.Write(...);%>
,但空白区域没有传到HTML上。
答案 0 :(得分:2)
如果需要,您可以使用HTML entity  
作为常规空格,或者使用
表示非破坏性空格。
我不知道剥离背后的确切机制,但很可能它与编译cshtml的顺序有关。在被填充之前,引擎将空白标记从空标记中剥离出来,这将是预期的行为。
答案 1 :(得分:1)
不要使用Response.Write。那个空间在那里。
<%= "This is sentence 1." %> <%= "This is sentence 2." %>
更新
您可能没有获得空格,因为您在内联代码之间拆分了<% %>
。编译器使它成为一行。尝试在代码后面执行if语句以获得更清晰的aspx。或者你是一个三元运营商,那样也有一个空间。
<p><%=TextoWeb("Ponencias", "QuieresSubirTuPonencia?YYY")%> <%= DateTime.Today < DateTime.Now ? TextoWeb("xxxPonencias", "QuieresSubirTuPonencia?YYY") : "" %></p>