0

我有一个名为 Lines 的模型。在它上面我有一个包含许多字符串的地址类,即:

public string ReferenceKey { get; set; }
public string Country { get; set; }
public string County { get; set; }
public string Postcode { get; set; }
public string PremisesName { get; set; }
public string PremisesName { get; set; }

我从对外部方的 Web 服务调用中获取信息,然后用返回的数据填充这些字段 - 请注意,在某些情况下,它们可能不会返回所有内容,因此例如 County 或 PostTown 可能返回为空。

目前在我的 cshtml 页面中,我显示的地址如下:

@Html.DisplayFor(model => model.Address.ReferenceKey),
@Html.DisplayFor(model => model.Address.PremisesName),
@Html.DisplayFor(model => model.Address.PostTown),
@Html.DisplayFor(model => model.Address.Postcode),
@Html.DisplayFor(model => model.Address.County),
@Html.DisplayFor(model => model.Address.Country)

返回所有数据时它工作正常但是如果某些字段为空白,它将显示例如 - REF1,,,POSTCODE,County,Country - 即它没有值的字段不会被打印但逗号看起来不太好的。我的想法是在我的模型中添加另一个字符串,如下所示。

public string ConcatAddress { get; set; }

现在我有点卡住了 - 在我的控制器中,我正在执行以下操作来构建字符串:

model.ConcatAddress = model.Address.ReferenceKey + model.Address.PremisesName....etc, etc

我需要做什么才能用一个等替换双逗号,这取决于值是否。在每个值检查之前可能有一个 string.IsNullorEmpty 但替换是什么?

4

4 回答 4

1

您可以结合使用String.Join和 Linq 查询。下面的方法可以很容易地变成字符串的扩展方法。您也可以使用 Linq 的 Aggregate 函数,但在我看来,String.Join 更直观。

此解决方案还将确保您无需担心前导或尾随逗号。

// Jon all the non-empty address components together.
model.ConcatAddress = string.Join(
    ", ", 
    (new string[] {
        model.Address.ReferenceKey,
        model.Address.PremisesName,
        model.Address.PostTown,
        model.Address.Postcode,
        model.Address.County,
        model.Address.Country
    }).
    Where(s => !string.IsNullOrEmpty(s)).
    ToArray());
于 2012-08-07T10:42:27.287 回答
1

在列表中添加您想要的字符串,例如:

var str = New List<string>();
if (!string.IsNullOrEmpty(model.Address.ReferenceKey)) {
  str.Add(model.Address.ReferenceKey);
}

然后加入字符串:

return string.Join(",", str);
于 2012-08-07T10:45:01.087 回答
0

您需要将 DisplayFor 参数映射到模型中的属性,例如 FullAddress,这样您就可以添加如下属性:

public string FullAddress 
{ 
    get
    {
        string[] addressParts = { ReferenceKey, Country, County, Postcode, PremisesName }
        return string.Join(",", addressParts.Where(s => !string.IsNullOrEmpty(s)).ToArray());
    }  
}

并做:

@Html.DisplayFor(model => model.FullAddress)
于 2012-08-07T10:44:25.417 回答
0

您可以将这样的属性添加到您的模型中

public string FullAddress
{
    get
    {
        return new List<string>
            { 
                Address.ReferenceKey,
                Address.PremisesName,
                Address.PostTown,
                Address.PostCode,
                Address.County,
                Address.Country
            }
            .Where(s => !string.IsNullOrWhiteSpace(s))
            .Aggregate((s1, s2) => s1 + "," + s2);
    }
}

我假设空白字段是指空白或空格,否则替换IsNullOrWhiteSpaceIsNullOrEmpty.

于 2012-08-07T10:48:05.097 回答