2012-08-07 44 views
0

我有一个叫做Lines的模型。在这我有一个包含若干个字符串的地址类,即:Concantenate一个字符串DisplayFor

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 ,,,邮编,县,国家 - 即它没有价值的字段不会被打印,但逗号将看起来不太好。我的想法是像下面一样向我的模型中添加另一个字符串。

public string ConcatAddress { get; set; } 

现在是我有点卡住了 - 在我的控制器我在做下面建立字符串:

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

我会做一个更换双逗号,等等取决于价值。一个string.IsNullorEmpty之前每个值检查可能,但在替换?

任何人都可以进一步帮助或建议更好的解决方案吗?

回答

1

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

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

然后加入字符串:

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

太好了 - 我喜欢这种方法,因为我有一个独立的地址助手类,所以我会在这里添加一个方法来完成上述操作。足够的时间过后,我会接受这个答案。 – 2012-08-07 10:53:25

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()); 
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) 
+1

这是不好的。如果任何地址组件是空白的,他仍然会有双逗号。 – 2012-08-07 10:48:23

+1

你是对的,我编辑我的评论,返回一个没有多个逗号的字符串。 – victorvartan 2012-08-07 11:14:44

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

相关问题