¿Cómo puedo truncar una cadena usando MVC Html Helpers?

Estoy tratando de truncar una cadena larga para mostrar solo en mi página de índice. Se muestra así:

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

La Descripción puede tener una longitud de 500 caracteres, pero no puedo mostrar tanto en ese diseño de cuadrícula. Me gustaría mostrar solo los primeros 25, ya que pueden verlo todo en la página de Detalles, pero parece que no puedo hacerlo funcionar sin truncarlo en el nivel del modelo.

Algo como esto sería bueno:

 @Html.DisplayFor(modelItem => item.Description.Take(25)) @Html.DisplayFor(modelItem => item.Description.Substring(0,25) 

EDITAR

Obtengo la siguiente excepción en Runtime cuando bash cualquiera de los dos métodos.

 Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

No use el ayudante html. Solo haz esto:

 @item.Description.Substring(0, Math.Min(item.Description.Length, 25)); 

Supongo que estás en algún bucle donde el item es el elemento actual.

Podrías hacer esto con un método de extensión.

 public static string Truncate(this string source, int length) { if (source.Length > length) { source = source.Substring(0, length); } return source; } 

Entonces en su opinión:

 @item.Description.Truncate(25) 

puede truncar los datos antes de que lleguen a la vista o usar esta maquinilla de afeitar:

 @{ var shortDescript = String.Concat(modelItem.Take(25)); } @Html.DisplayFor(modelItem => shortDescript) 

Podría considerar la creación de una propiedad de modelo especial para tales instancias donde necesita esto:

 public class MyModel { public string MyDescription {get; set;} public string MyShortDescription { get { return Truncate(MyDescription, 25); } } private string Truncate(string, howMany) { // Code to perform the substring here } @Html.DisplayFor(modelItem => item.MyShortDescription); 

Intenta esto si quieres usar los ayudantes de HTML . Digamos que quieres formar parte de una cadena antes del primer espacio .IndexOf (”) (o simplemente puedes usar un índice predefinido 25 como dijiste):

 @Html.DisplayFor(modelItem => item.Description).ToString().Substring(0,item.Description.IndexOf(' ')) 

Probar una extensión

 public static string TruncateMiddle(this string value, int lengthExpected, string separator = "...") { if (value.Length <= lengthExpected) return value; decimal sepLen = separator.Length; decimal charsToShow = lengthExpected - sepLen; decimal frontChars = Math.Ceiling(charsToShow / 2); decimal backChars = Math.Floor(charsToShow / 2); return value.Substring(0, (int)frontChars) + separator + value.Substring(value.Length - (int)backChars); } 

Utilizar

 MyLongString.TruncateMiddle(50) 

Devuelve algo como esto: Lorem ipsum dolor sit ame ... onsectetur cras amet.