【问题标题】:Razor adding a white space before contentRazor 在内容前添加空格
【发布时间】:2012-09-25 10:57:06
【问题描述】:

我正在输出一个我想用逗号分隔的地址。 如果我在输出地址之前不包含任何 html,它会正确显示,没有任何额外的空格。

示例:

97 Glen Road, 霍利伍德, BT18 0LE

目前获得:

97 Glen Road , 霍利伍德 , BT18 0LE

我的代码是:

    <p class="no-margin-top">@Html.DisplayFor(modelItem => item.Address1)
    @if(!string.IsNullOrEmpty(item.Address2)){
        @:, @Html.DisplayFor(modelItem => item.Address2)
    }
    @if(!string.IsNullOrEmpty(item.Address3)){
        @:, @Html.DisplayFor(modelItem => item.Address3)
    }
    @if(!string.IsNullOrEmpty(item.Town)){
        @:, @Html.DisplayFor(modelItem => item.Town)
    }
    @if(!string.IsNullOrEmpty(item.County)){
        @(", ")@("Co. ")@Html.DisplayFor(modelItem => item.County)
    }
    @if(!string.IsNullOrEmpty(item.Postcode)){
        @(", ")@Html.DisplayFor(modelItem => item.Postcode)
    }
    @if(!string.IsNullOrEmpty(item.Country)){
        @(", ")@Html.DisplayFor(modelItem => item.Country)
    }

我尝试过以不同方式输出逗号,如上所示,但仍然得到相同的结果。

我还尝试从代码中删除所有空格以及使用@Html.Raw。

如果有人对此有解决方案或可以提出更好的方法,将不胜感激。

更新

由于框架内的变化,Darin 的解决方案现在会产生错误。

您需要确保您使用的是 System.Linq

然后修改达林的代码如下:

    public string FormattedAddress
    {
        get
        {
            var values = new[] { Address1, Address2, Address3, Town, Postcode, "Co. " + County }.Where(x => !string.IsNullOrEmpty(x));
            return string.Join(", ", values);
        }
    }

【问题讨论】:

    标签: razor


    【解决方案1】:

    哇,在你看来,这看起来像是一团糟。我建议您使用视图模型并将以下属性添加到您的视图模型中,这将负责正确格式化地址:

    public string FormattedAddress
    {
        get
        {
            var values = new[] { Address1, Address2, Address3, Town, Postcode, "Co. " + County }
                .Where(!string.IsNullOrEmpty);
            return string.Join(", ", values);
        }
    }
    

    然后在您看来,将混乱替换为:

    <p class="no-margin-top">
        @Html.DisplayFor(modelItem => item.FormattedAddress)
    </p>
    

    如果你现在告诉我你已经违反了所有好的实践并且没有使用视图模型,而是直接将你的域实体传递给视图,那么除了告诉你这是错误的之外,你可以以某种方式破解它观点:

    <p class="no-margin-top">
        @{
            var values = new[] { item.Address1, item.Address2, item.Address3, item.Town, item.Postcode, "Co. " + item.County }
                .Where(!string.IsNullOrEmpty);
            var formattedAddress = string.Join(", ", values);
        }
        @formattedAddress
    </p>
    

    但老实说,请使用视图模型。

    【讨论】:

    • 不得不稍微修改视图模型代码,因为我遇到了很多错误。但感谢达林为我指明了正确的方向。 stackoverflow.com/a/11844234/1472203 给了我一点额外的帮助
    • 是的,我忘记了 Razor 视图中的 = 符号。另外我猜你应该使用@Html.DisplayFor(modelItem =&gt; item.FormattedAddress)
    【解决方案2】:

    尝试使用剃刀文本标记将逗号加空格强制为文本。这可能是一个剃刀解释问题。

    {<text>, </text>@Html.DisplayFor(modelItem => item.Address2)}
    

    祝你好运

    【讨论】:

    • 这会产生同样的问题。
    • @Stephen 上面的解决方案看起来好多了 - 请忽略这个/