2011-09-13 15 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

एआरएम, लंबाई की जांच करें। –

उत्तर

18

हो सकता है कि कुछ इस तरह -

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

yup, यह सही है, बहुत बहुत धन्यवाद। – HAJJAJ

0

50 आपकी परिणाम स्ट्रिंग की लंबाई अधिक है, तो यह कोड सही होने पर सभी मामलों में विफल हो जाएगा। आपको उसमें वर्ण की मात्रा को बड़ा नहीं करना चाहिए। स्ट्रिंग। लम्बाई संपत्ति के साथ परिचालन करें, जो आपको स्ट्रिंग में वर्णों की संख्या को द्विपक्षीय रूप से प्रदान करेगा। तो यदि आपका स्ट्रिंग 50 वर्णों से अधिक (या 50 के बराबर) है तो आप कह सकते हैं कि आपको पहले 50 char मिलेंगे, अन्यथा आप केवल पूरी स्ट्रिंग प्राप्त कर सकते हैं जो 50 वर्णों से कम है।

Eval ("BannerDescription") toString() की लंबाई> 49:।

आप इस कोड का उपयोग कर सकते हैं।? Eval ("BannerDescription") toString() सबस्ट्रिंग (0, 49):।।। Eval ("BannerDescription") toString()

सादर, पीटर

+0

हाँ मुझे पता है। क्योंकि उपयोगकर्ता एक है जो डेटा प्रविष्टि नियंत्रित कर रहा है है! कुछ समय वह 10 litters दूसरी बार दर्ज वाला शायद 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

नोट: इस उत्तर, के लिए है के रूप में सवाल इस विशेष टैग था जब इस उत्तर पोस्ट किया गया था।

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

अभी तक बेहतर, कोड-पीछे (.cs) में एक संरक्षित विधि परिचय कि मार्कअप में करने के लिए भेजा जा सकता है:


यह आपको कोई 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 नहीं किया जा सकता क्यों नहीं, यह काम करना चाहिए। क्या यह सी # नहीं है जिसका आप उपयोग कर रहे हैं? – HenrikW

+0

कोई यह asp.net है + vb.net – HAJJAJ

0

का प्रयोग करें, मैं इसे कई बार अपनी परियोजनाओं में इस्तेमाल किया है।

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

@ हेनरिक डब्ल्यू: इसे आज़माएं, यह कोड स्निपेट काम कर रहा है। – aagnee

+0

'?' चरित्र का उपयोग यहां नहीं किया जा सकता है – HAJJAJ

+0

यह है कि ....... .... हालत प्रकार। – aagnee

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

का चयन क्यों करते हैं। टेक स्ट्रिंग का सदस्य नहीं है! – HAJJAJ

+0

@HAJJAJ: टेक लिंक का हिस्सा है और चूंकि स्ट्रिंग एक आईनेमरेबल है, कोई भी टेक का उपयोग कर सकता है। हालांकि सबस्ट्रिंग शायद बेहतर विकल्प है। – chrisaut

+1

<0 @ आयात नामस्थान = "System.Linq"%> पृष्ठ –

1

यह आपकी समस्या है, और आप .NET 3.5 का उपयोग कर रहे हैं, तो आप की कोशिश कर सकते:

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 के रूप में एक ही तरीके से इसे कहते लेकिन यह फेंक नहीं होगा गलत सूचकांक/लंबाई के लिए। उदाहरण बनाने के लिए: <%# Eval("BannerDescription").ToString().SubstringNE(1, 50)%>NE "कोई अपवाद नहीं" के लिए है।

संबंधित मुद्दे