如何防止空白被修剪?

时间:2018-03-14 10:54:24

标签: c# asp.net

请查看以下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上。

2 个答案:

答案 0 :(得分:2)

如果需要,您可以使用HTML entity &#32;作为常规空格,或者使用&nbsp;表示非破坏性空格。

我不知道剥离背后的确切机制,但很可能它与编译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>