0

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

値に応じて、二重コンマを1つなどに置き換えるにはどうすればよいでしょうか。おそらく各値チェックの前に string.IsNullorEmpty ですが、置換ではどうでしょうか?

4

4 に答える 4

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());
于 2012-08-07T10:42:27.287 に答える
1

リストに必要な文字列を追加します。例:

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

次に、文字列を結合します。

return string.Join(",", str);
于 2012-08-07T10:45:01.087 に答える
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)
于 2012-08-07T10:44:25.417 に答える
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.

于 2012-08-07T10:48:05.097 に答える