2011-09-13 239 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、長さを確認してください。 –

答えて

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()SUBSTRING(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

以下のコードスニペットを使用してください。私は自分のプロジェクトで何度も使用しています。

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

@HenrikW:これを試してください、それは働くコードスニペットです。 – aagnee

+0

'?'文字はここでは使用できません – HAJJAJ

+0

これはif ..... else ....の条件タイプです。 – aagnee

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

.Takeはstringのメンバーではありません! – HAJJAJ

+0

@HAJJAJ:TakeはLinqの一部です。文字列はIEnumerable でTakeを使うことができます。しかしSubstringはおそらくより良い選択です。 – chrisaut

+1

<%@ Import Namespace = "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は「例外なし」です。

関連する問題