【问题标题】:Concatenate a string for DisplayFor为 DisplayFor 连接一个字符串
【发布时间】:2012-08-04 08:33:36
【问题描述】:

我有一个名为 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

我必须怎么做才能用一个等替换双逗号,这取决于值是否。在每个值检查之前可能有一个 string.IsNullorEmpty 但替换是什么?

【问题讨论】:

    标签: c# .net asp.net-mvc-3 html-helper string-concatenation


    【解决方案1】:

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

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

    然后加入字符串:

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

    【讨论】:

    • 太棒了——我喜欢这种方法,因为我有一个单独的地址助手类,所以我将在这里添加一个方法来执行上述操作。当足够的时间过去后,我会接受这个答案。
    【解决方案2】:

    您可以结合使用 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());
    

    【讨论】:

      【解决方案3】:

      您需要将 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)
      

      【讨论】:

      • 这不好。如果任何地址组件为空白,他仍然会有双逗号。
      • 你说得对,我编辑了我的评论以返回一个没有多个逗号的字符串。
      【解决方案4】:

      您可以将这样的属性添加到您的模型中

      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

      【讨论】:

        猜你喜欢
        • 2018-10-15
        • 2013-05-15
        • 2012-02-02
        • 1970-01-01
        • 2021-01-28
        • 2013-01-05
        • 2011-06-17
        • 2016-01-17
        • 2022-12-17
        相关资源
        最近更新 更多