C# 连接DisplayFor的字符串

C# 连接DisplayFor的字符串,c#,.net,asp.net-mvc-3,html-helper,string-concatenation,C#,.net,Asp.net Mvc 3,Html Helper,String Concatenation,我有一个叫Lines的模型。它有一个address类,包含许多字符串,即: 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 Premises

我有一个叫Lines的模型。它有一个address类,包含许多字符串,即:

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; }
我从对外部用户的webservice调用中获取信息,然后用返回的数据填充这些字段——注意,在某些情况下,它们可能不会返回所有信息,例如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、Country-即它没有值的字段将不会被打印,但逗号看起来不太好。我的想法是向我的模型中添加另一个字符串,如下所示

public string ConcatAddress { get; set; }
现在,如果我被卡在控制器中,我正在做下面的操作来建立字符串:

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

我需要做什么才能将双逗号替换为一,等等,这取决于值是否为。每次值检查前都会有一个string.IsNullorEmpty,但在替换上会有什么呢?

您可以结合使用和Linq查询来完成。下面的方法可以很容易地变成字符串上的扩展方法。您也可以使用Linq的聚合函数,但在我看来,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)

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

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

您可以将类似这样的特性添加到模型中

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);
    }
}
公共字符串完整地址
{
得到
{
返回新列表
{ 
Address.ReferenceKey,
地址:PremisesName,
地址:邮政城,
地址.邮政编码,
地址,县,,
地址.国家
}
.Where(s=>!string.IsNullOrWhiteSpace)
.骨料((s1,s2)=>s1+“,”+s2);
}
}

我假设空白字段是指空字段或空白字段,否则将
IsNullOrWhiteSpace
替换为
IsNullOrEmpty

这是不好的。如果任何地址组件为空,他仍然会有两个逗号。你是对的,我编辑了我的注释以返回一个没有多个逗号的字符串。太好了-我喜欢这个方法,因为我有一个单独的地址助手类,所以我将在这里添加amethod来完成上面的操作。当足够的时间过去后,我会接受这个答案。
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);
    }
}