2012-02-22 21 views
12

Tengo el siguiente dentro de mi vistaMVC Razor necesita para obtener Subcadena

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

necesito para obtener la primera inicial del nombre.

me trataron

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

pero no parece funcionar. Me sale el siguiente error: .. 'System.Web.Mvc.MvcHtmlString' no contiene una definición para 'subcadena' y sin extensión

+0

Estaría muy sorprendido si quería 'Subcadena (1,1)' en lugar de 'Subcadena (0,1)'. – tvanfosson

Respuesta

-9

Si sólo está deseando mostrar el primer carácter de item.FirstName por qué no hacer:

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

Lo tiene del lado equivocado del soporte de cierre.

+5

Esto no funcionará. Obtendrás una 'InvalidOperationException' porque las llamadas a métodos no son compatibles con las expresiones lambda utilizadas por html helpers. –

7

se debería poner una propiedad en su modelo de vista de que en lugar de tratar de conseguir que en el código de la vista. La única responsabilidad de las vistas es mostrar lo que le da el modelo, no debe crear nuevos datos del modelo.

5

podría sugerir que la vista no es el lugar adecuado para hacer esto. Probablemente debería tener una propiedad de modelo separada, FirstInitial, que contiene la lógica. Tu vista debería simplemente mostrar esto.

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

Se podría aplicar a la vista de la siguiente manera:

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

Esto funcionó muy bien para mí, ¡gracias! – ShaunOReilly

+0

Funcionó como encanto. Gracias – MuniR

1

Se puede utilizar un método de extensión personalizada como se muestra a continuación:

/// <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)); 
} 

Espero que esto ayude ...

-1

Esto funcionó para mí (sin ayuda):

@item.Description.ToString().Substring(0, (item.Description.Length > 10) ? 10 : item.Description.Length)