连接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可能在每次值检查之前,但在替换时呢?
在列表中添加您想要的字符串,例如:
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
。