连接DisplayFor的字符串

时间:2012-08-07 10:35:45

标签: c# .net asp.net-mvc-3 html-helper string-concatenation

我有一个名为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,县,国家 - 即它没有值的字段不会被打印但是逗号将是哪个看起来不是很好。我的想法是在我的模型中添加另一个字符串,如下所示。

public string ConcatAddress { get; set; }

现在我有点陷入困境 - 在我的控制器中,我正在做下面的事情来构建字符串:

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

根据值的不同,我需要做些什么才能将双逗号替换为等号。在每个值检查之前的字符串.IsNullorEmpty,但是替换的是什么?

4 个答案:

答案 0 :(得分: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());

答案 1 :(得分:1)

在列表中添加所需的字符串,例如:

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

然后加入字符串:

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

答案 2 :(得分: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)

答案 3 :(得分: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);
    }
}

我假设空白字段表示空或空格,否则将IsNullOrWhiteSpace替换为IsNullOrEmpty