C# 连接DisplayFor的字符串
我有一个叫Lines的模型。它有一个address类,包含许多字符串,即: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
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);
}
}