2011-09-13 619 views
7

Estoy tratando de obtener las primeras 50 letras, así que usé la función subString para obtenerlo.¿El índice y la longitud deben hacer referencia a una ubicación dentro de la cadena?

Como se puede ver, que utiliza este código para conseguirlo:

<%# Eval("BannerDescription").ToString.Substring(1, 50)%> 

pero desafortunadamente no funciona y un mensaje de error que se avecina:

índice y la longitud deben hacer referencia a una ubicación dentro de la cadena.

¿Hay alguna otra forma de arreglarlo?

porque el usuario es quien controla la entrada de datos. algunas veces va a ingresar 10 letras otras veces tal vez 1000 letras, entonces, ¿cómo puedo resolver esto?

yo los probé, pero podemos utilizar de esta manera:

<%# IIf(Eval("BannerDescription").ToString().Length > 49, Eval("BannerDescription").ToString().Substring(0, 49), Eval("BannerDescription"))%>

Gracias.

+2

Sí - no especifican una longitud mayor que la cadena. El mensaje de error te dice exactamente cuál es el problema. –

+0

sí, lo sé. ¡porque el usuario es quien controla la entrada de datos! algunas veces va a entrar a 10 litros otras veces tal vez 1000 litros ¿cómo puedo resolver esto? – HAJJAJ

+0

Erm, verifique la longitud. (En serio, ¿quién lo vota?) –

Respuesta

18

Tal vez algo como esto -

<%# Eval("BannerDescription").ToString().Substring(0, Math.Min(Eval("BannerDescription").ToString().Length, 50)) %> 
+0

yup, esto es correcto, muchas gracias. – HAJJAJ

0

50 es más que la longitud de su cadena de resultados, su código fallará en todos los casos cuando esto sea cierto. No debe proporcionar un parámetro más grande que la cantidad de caracteres en él. Opere con la propiedad String.Length, que le proporcionará dinamicamente la cantidad de caracteres en el String. Entonces, si su Cadena tiene más de 50 caracteres (o igual a 50), puede decir que obtendrá los primeros 50 caracteres, de lo contrario solo obtendrá la cadena completa, que es algo inferior a 50 caracteres.

Puede utilizar este código:.

Eval ("BannerDescription") ToString() Duración> 49.? Eval ("BannerDescription") ToString() substring (0, 49):... Eval ("BannerDescription") ToString()

Saludos, Peter

+0

sí, lo sé. porque el usuario es quien controla la entrada de datos. algunas veces va a entrar en 10 litros otras veces tal vez 1000 litros ¿cómo puedo resolver esto? – HAJJAJ

+0

@HAJJAJ, es un _letter_ en lugar de una camada. Probablemente sea más correcto llamarlo personaje. – paxdiablo

1

Usted debe ser capaz de implementar una función que se le dará una versión más corta si es demasiado larga:

<% 
    Function ShortVersion (strData, strLen) 
     If Len (strData) > strLen Then 
      ShortVersion = Left (strData, strLen) 
     Else 
      ShortVersion = strData 
     End If 
    End Function 
%> 
1

NOTA: esta respuesta es para , como la cuestión tenía esta etiqueta en particular cuando esta respuesta fue publicada.


esto le dará no más de 50 caracteres:

<%# Eval("BannerDescription").ToString().Length > 50 ? Eval("BannerDescription").ToString().Substring(0, 50) : Eval("BannerDescription").ToString() %> 

Mejor aún, introducir un método protegido en el código subyacente (Cs) que se puede denominar en el marcado:

de marcado:

<%# GetStringMaxLength(Eval("BannerDescription").ToString(), 50) %> 

Código detrás de:

protected static string GetStringMaxLength(string text, int maxLength) 
{ 
    if (string.IsNullOrEmpty(text)) 
    { 
     return string.Empty; 
    } 

    if (text.Length > maxLength) 
    { 
     return text.Substring(0, maxLength); 
    } 

    return text; 
} 

De esta forma es más limpia.:-)

+0

El '?' el carácter no se puede usar aquí – HAJJAJ

+0

@HAJJAJ Por qué no, debería funcionar. ¿No es C# lo que estás usando? – HenrikW

+0

no es asp.net + vb.net – HAJJAJ

0

Use debajo del fragmento de código, lo he usado muchas veces en mis proyectos.

<%# Eval("BannerDescription").ToString().Length <= 22 ? Eval("BannerDescription") : string.Format("{0}....", Eval("BannerDescription").ToString().Substring(0,22))%> 
+0

@HenrikW: intente esto, está trabajando fragmento de código. – aagnee

+0

El '?' el carácter no se puede usar aquí – HAJJAJ

+0

Eso es para si ..... más .... tipo de condición. – aagnee

3
<%# new string(Eval("BannerDescription").ToString().Take(50).ToArray()) %> 
+0

. ¡No es miembro de la cadena! – HAJJAJ

+0

@HAJJAJ: Take es parte de Linq y como string es un IEnumerable se puede usar Take. Sin embargo, Substring es probablemente la mejor opción. – chrisaut

+1

add <% @ Import Namespace = "System.Linq"%> en la página –

1

Si este es su problema, y ​​se está utilizando .NET 3.5, usted podría intentar:

public static class StringEx 
{ 
    public static string SubstringNE(this string str, int index, int length) 
    { 
     if (index >= str.Length) 
     { 
      return String.Empty; 
     } 

     if (index + length > str.Length) 
     { 
      return str.Substring(index); 
     } 

     return str.Substring(index, length); 
    } 
} 

que lo haga en la misma forma que Substring pero no va a tirar para índice/longitud incorrectos. Para hacer un ejemplo: <%# Eval("BannerDescription").ToString().SubstringNE(1, 50)%>. NE es para "Sin excepciones".

Cuestiones relacionadas