2011-09-13 31 views
7

처음 50자를 얻으려고하므로 subString 함수를 사용했습니다. 당신이 볼 수 있듯이색인 및 길이는 문자열 내의 위치를 ​​참조해야합니까?

, 나는 그것을 얻기 위해이 코드를 사용 :

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

을하지만 불행히도 그것은 작동하지 않는 오류 메시지가오고있다 :

지수와 길이가 참조해야합니다 문자열 내의 위치.

그래서 다른 방법으로 해결할 수 있습니까?

사용자가 데이터 입력을 제어하고 있기 때문에! 어떤 때는 그가 10 번이나 1000 번 문자를 입력 할 것입니다. 어떻게 해결할 수 있습니까?

나는 그들 모두를 시도했지만 우리는이 방법을 사용할 수 있습니다

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

감사합니다.

+2

예 - 문자열보다 큰 길이를 지정하지 마십시오. 오류 메시지는 문제가 무엇인지 정확하게 알려줍니다. –

+0

네, 알고 있습니다. 사용자가 데이터 입력을 제어하는 ​​사람이기 때문에! 어떤 때는 10 리터를 다른 시간에 1000 리터로 입력 할 수 있습니다. 어떻게 해결할 수 있습니까? – HAJJAJ

+0

Erm, 길이를 확인하십시오. (진지하게, whovote who?) –

답변

18

아마 이런 일이 -

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

그래,이게 맞아. 고마워. – HAJJAJ

0

50 결과 문자열의 길이보다 길면 모든 경우에 코드가 실패 할 수 있습니다. 그 안에 chars 수량보다 큰 매개 변수를 제공해서는 안됩니다. String.Length 속성을 사용하면 문자열의 문자 수를 dinamically 줄 수 있습니다. 따라서 String이 50 자 이상 (50 자 이상)이라면 처음 50자를 얻을 수 있다고 말할 수 있습니다. 그렇지 않으면 50 자보다 적은 전체 문자열 만 얻을 수 있습니다. 이 코드를 사용할 수 있습니다

:.

평가 ("BannerDescription")를 ToString() 길이> 49.? 평가 ("BannerDescription") ToString() 문자열 (0, 49) :... 평가 ("BannerDescription") ToString()

감사합니다, 피터

+0

네, 알고 있습니다. 사용자가 데이터 입력을 제어하고 있기 때문에! 그가 10 리터를 다른 시간에 입력 할 수도 있습니다. 아마도 1000 리터 어떻게 해결할 수 있습니까? – HAJJAJ

+0

@HAJJAJ, 쓰레기가 아닌 _letter_입니다. 아마도 그것을 문자라고 부르는 것이 더 정확할 것입니다. – paxdiablo

1

당신이하는 기능을 구현 할 수 있어야한다 너무 오래 만약 당신이 짧은 버전을 제공 :

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

참고 :이 답변이 게시되었을 때 질문이 특정 태그를 가지고로이 대답은, 입니다. 마크 업에서 참조 할 수 코드 숨김 (.cs)에서 보호 방법을 소개하고, 더 나은 아직


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

이 당신에게 더 이상 50 자 이하로 줄 것이다 :

마크 업 :

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

코드 숨김 :

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

이렇게하면 더 깨끗하게 보입니다.:-)

+0

'?' 여기서는 캐릭터를 사용할 수 없습니다. – HAJJAJ

+0

@HAJJAJ 왜 안되나요? 작동해야합니다. 당신이 사용하고있는 C#이 아닌가요? – HenrikW

+0

아니요 asp.net + vb.net – HAJJAJ

0

아래의 Code Snippet을 사용하십시오. 저는 프로젝트에서 여러 번 사용했습니다.

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

당신은 Substring와 같은 방식으로 호출하지만 포기하지 않습니다 :이 문제이며, 당신이 .NET 3.5을 사용하는 경우

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

@HenrikW :이 코드를 사용해보십시오. 작동 코드입니다. – aagnee

+0

'?' 여기서는 캐릭터를 사용할 수 없습니다. – HAJJAJ

+0

그럴 경우 ... else ... 조건 유형. – aagnee

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

.Take는 문자열의 구성원이 아닙니다! – HAJJAJ

+0

@HAJJAJ : Take는 Linq의 일부이며, 문자열은 IEnumerable 이기 때문에 Take를 사용할 수 있습니다. 그러나 Substring이 아마도 더 나은 선택 일 것입니다. – chrisaut

+1

<% @ Import 네임 스페이스 = "System.Linq"%>를 페이지에 추가 –

1

, 당신은 시도 할 수 색인/길이가 잘못되었습니다. 예 : <%# Eval("BannerDescription").ToString().SubstringNE(1, 50)%>. NE은 "예외 없음"을 나타냅니다.

관련 문제