我有一个名为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,但是替换的是什么?
答案 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
。