如何在剃须刀代码块中插入空格?

How do I insert spaces within a razor Code block?

VS2013、MVC5、剃刀,VB

我想在单词 'Answered' 前加空格。如何在以下 Razor 代码块中强制使用空格?

@Code If Model.DisplayAnsweredFlag Then
  @If Model.Answered Then
    @Html.Raw("Answered")
   End If
 End If
End Code

在 html.raw() 中,空格本身或前面文本中的空格似乎没有编码到页面中。但我也不能在代码块中使用“ ”或“@ ”,因为它的语法不正确。

如果我编码技术不好,请指教,或者如果有不同的方法来获取空格,请指教。

你为什么不尝试不同的方法。使用带有一些填充的 span 标签

解析 HTML 时会忽略空格,除非它们出现在 pre 块中。如果你想填充一些文本,你需要采取以下方法之一:

  1. 将其包装在块级 HTML 元素中,例如 pdiv,然后使用 [=] 将 padding/margin 添加到元素中34=]。这是推荐的方法。

  2. 使用   代替您要填充的常规空格。渲染时只计算不间断空格 HTML。但是,这种方法很老套,不推荐使用。

  3. 将您的文本包裹在 pre 元素中。然后 <pre></pre> 标签中的所有空格都将被考虑在内。但是,这种方法也是 hacky,不推荐使用。

AndyBuk在这里给出了答案:
https://forums.asp.net/t/1772048.aspx?How+to+use+no+break+space+HTML+character+inside+if+brackets+in+a+view+

他在那 link 中写道:

The introduction to Razor syntax at:
http://www.asp.net/web-pages/tutorials/basics/2-introduction-to-asp-net-web-programming-using-the-razor-syntax is quite useful.
To force html output for your string, you may use <text> to Block or @: as a Prefix.

@if (condition)
{
    <text>&nbsp;</text>
    @:&nbsp;
}
<text> &nbsp; &nbsp; &nbsp;</text>

插入“&nbsp;”以添加更多空格。

当我需要在 table 中显示结构时,我会使用这种方法。

item已经预先计算了level属性。

@helper PrintChild(List<ItemBalanceView> items)
{
    foreach (var item in items)
    {
        <tr>
            <td>@Html.Raw(InsertSpaces(item.LevelNum))<a class="text-primary" href='@Url.Content("~/Items/DetailsPos/")@item.ItemDocDetailID'>@item.ItemDocDetailName</a></td>
            <td>@Math.Round(item.Qty, 2)</td>
            <td>@Math.Round(item.Price, 2)</td>
            <td>@Math.Round(item.Total, 2)</td>
        </tr>

        if (item.Children != null)
        {
            @PrintChild(item.Children)
        }
    }
}

@functions  
{
    string InsertSpaces(int level)
    {
        var str = string.Empty;
        for (int i = 0; i < level; i++)
        {
            str += "&nbsp;&nbsp;";
        }

        return str;
    }
}

<table class="table table-sm">
    <thead>
        <tr>
            <th>Name</th>
            <th>Qty</th>
            <th>Price</th>
            <th>Total</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.BalancesAsStructure)
        {
            <tr>
                <td>@Html.Raw(InsertSpaces(item.LevelNum))<a class="text-primary" href='@Url.Content("~/Items/DetailsPos/")@item.ItemDocDetailID'>@item.ItemDocDetailName</a></td>
                <td>@Math.Round(item.Qty, 2)</td>
                <td>@Math.Round(item.Price, 2)</td>
                <td>@Math.Round(item.Total, 2)</td>
            </tr>

            if (item.Children != null)
            {
                @PrintChild(item.Children)
            }
        }
    </tbody>
    <tfoot>
        <tr style="background-color:#d7c0c0!important;">
            <th></th>
            <th></th>
            <th></th>
            <th>@Math.Round(Model.Total, 2)</th>
        </tr>
    </tfoot>
</table>