连接DisplayFor的字符串

本文关键字:字符串 DisplayFor 连接 | 更新日期: 2024-10-24 10:47:40

我有一个名为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

我该怎么做才能将双逗号替换为一,等等,取决于值是否为。一根绳子。IsNullorEmpty可能在每次值检查之前,但在替换时呢?

连接DisplayFor的字符串

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

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

然后加入字符串:

return string.Join(",", str);

您可以使用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());

您需要将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)

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

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);
    }
}

我假设空白字段的意思是空或空白,否则用IsNullOrEmpty替换IsNullOrWhiteSpace