2012-02-22 10 views
12

I私の見解MVCかみそりは、サブストリングを取得する必要があり

 @Html.DisplayFor(modelItem => item.FirstName) 

の以下の内部が、私はファーストネームの最初のイニシャルを取得する必要があります。

私は

@Html.DisplayFor(modelItem => item.FirstName).Substring(1,1) 

を試みたが、動作するようには思えません。私は次のエラーを取得する:..「System.Web.Mvc.MvcHtmlString」「サブストリング」と拡張子なしの定義が含まれていません

+0

'Substring(0,1)'の代わりに 'Substring(1,1)'が必要だったら、本当に驚いています。 – tvanfosson

答えて

-9

あなただけしない理由item.FirstNameの最初の文字を表示するために欠けている場合は、次の

@Html.DisplayFor(modelItem => item.FirstName.Substring(1,1)) 

あなたは閉じ括弧の反対側にあります。

+5

これは動作しません。 htmlヘルパーが使用するラムダ式ではメソッド呼び出しがサポートされていないため、 'InvalidOperationException'が返されます。 –

7

ビューコードで取得しようとするのではなく、ViewModelにそのプロパティを配置する必要があります。ビューのみの責任は、モデルによって与えられた内容を表示することです。モデルから新しいデータを作成すべきではありません。

5

私は、ビューはこれを行う適切な場所ではないことを示唆するかもしれません。おそらく、論理を含む個別のモデルプロパティFirstInitialが必要です。あなたのビューは単にこれを表示する必要があります。

public class Person 
    { 
     public string FirstName { get; set; } 

     public string FirstInitial 
     { 
      get { return FirstName != null ? FirstName.Substring(0,1) : ""; } 
     } 

     ... 
    } 


    @Html.DisplayFor(modelItem => modelItem.FirstInitial) 
22

次のように、ビューに実現することができます。以下に示すように

@Html.DisplayFor(modelItem => modelItem.FirstName).ToString().Substring(0,5) 
+1

これは私のために非常にうまくいった、ありがとう! – ShaunOReilly

+0

チャームとして働いた。ありがとう – MuniR

1

をあなたはカスタム拡張メソッドを使用することができます。

/// <summary> 
/// Returns only the first n characters of a String. 
/// </summary> 
/// <param name="str"></param> 
/// <param name="start"></param> 
/// <param name="maxLength"></param> 
/// <returns></returns> 
public static string TruncateString(this string str, int start, int maxLength) 
{   
    return str.Substring(start, Math.Min(str.Length, maxLength)); 
} 

・ホープ、このことができます...

-1

これは私のために働いた(ヘルパーなし):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length) 
関連する問題