2011-12-15 23 views
1

私はデータをレンダリングするためにif/elseステートメントを使いたいと思います。列の長さが30文字より大きい場合、私はこの列にsubstring関数を使用し、短いデータを '...'でレンダリングします。しかし、それは動作しませんASP.NET MVC列の長さを表示

@if (item.BOOK_Title.Length >= 30) 
{ 

    @{var display = item.BOOK_Title.Substring(0,30)+"...";} 
    @Html.DisplayFor(modea => display) 

} 
else 
    @Html.DisplayFor(modea => item.BOOK_Title) 

私のコードで何が問題なのか分かりません。

+0

あなたがHTML期待/実際の出力がエラーメッセージであるか、何を提供しなければなりません。 「うまくいきません」というのは誰もあなたを助けるにはあまりにも一般的です。 – SliverNinja

+1

"{"が見つかりましたが、 "@"が見つかりました。ブロック文は "{"と "}"で囲む必要があります。 CSHTMLページでは、単一ステートメントの制御フロー文は使用できません。 – lukaszb

答えて

1

あなたが複数の場所でこれを使用する可能性がありますのでhttp://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

を参照してください、カミソリ「ヘルパー機能」を使用するには、このより良いかもしれません、これは彼らの偉大な使用です。かみそりで

+1

さらに、モデル自体にビヘイビアを入れてください。 。 。 –

+0

私はヘルパーを使いました、それは動作します、ありがとうMystere Man :) – lukaszb

+0

@WyattBarnett - これはビューの機能と考えています。レイアウトを変更した場合、文字列をトリミングする方法を変更する可能性があります。そのため、論理的にはビューの配慮が必要です。 –

2

elseの中カッコを追加するだけです。

@if (item.BOOK_Title.Length >= 30) 
{ 
    var display = item.BOOK_Title.Substring(0,30)+"..."; 
    <text>@display</text> 
} 
else 
{ 
    <text>@Html.DisplayFor(modea => item.BOOK_Title)</text> 
} 
+0

エラーが発生しました:予期しない "{"の後に "@"文字があります。コードブロック(@if {}、@ {}など)の本体の内部に入ると、コードに切り替えるために "@ {"を使う必要はありません。 – lukaszb

+0

これを修正するためにコードを更新しました。 – Dean

0

、あなたのブロックは中括弧を持っている必要があります:

@if (item.BOOK_Title.Length >= 30) 
{ 
    var display = item.BOOK_Title.Substring(0,30)+"..."; 
    Html.DisplayFor(modea => display) 
} 
else 
{ 
    Html.DisplayFor(modea => display) 
} 
+0

まだ同じエラー... – lukaszb

+0

修正するために私のコードを更新しました。 – danludwig

関連する問題