9

次のようにnavigateプロパティが設定されたハイパーリンクがあります。

NavigateUrl='<%# Eval("My Text") %>'

文字列を140文字に制限するにはどうすればよいですか?このEval( "My Text")。ToString()。Substring(0,140)を試しましたが、文字列の長さが140文字未満の場合、例外がスローされます。

4

6 に答える 6

19

そしてさらに他の可能性:

Eval("My Text").ToString().PadRight(140).Substring(0,140).TrimEnd()

編集:

私もLINQが好きです:

Eval("My Text").ToString().Take(140).Aggregate("", (x,y) => x + y)
于 2013-01-21T22:43:55.060 に答える
4

これを使って (:

< % # Eval("MyText").ToString().Length <= 30 ? Eval("MyText") : Eval("MyText").ToString().Substring(0, 30)+"..." % > 
于 2013-06-04T08:48:41.533 に答える
3

くそー私はLINQが好きです:

string.Concat('<%# Eval("My Text") %>'.ToString().Where((char, index) => index < 140))
于 2013-01-21T22:46:29.800 に答える
2

次に示すように、Truncateメソッドを試すことができます。

C#文字列の切り捨て

thisソースパラメータの前にキーワードを追加するだけで、拡張メソッドに変換できます。これはより複雑なアプローチですが、別の場所で再利用する必要がある場合に役立つ可能性があります...

あなたの場合、あなたは持っているでしょう:

NavigateUrl='<%# Eval("My Text").ToString().Truncate(140) %>'

完全なコンソールテストアプリ:

using System;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string test1 = "A really big string that has more than 140 chars. This string is supposed to be trunctaded by the Truncate extension method defined in class StringTool.";

            Console.WriteLine(test1.Truncate(140));

            Console.ReadLine();
        }
    }

    /// <summary>
    /// Custom string utility methods.
    /// </summary>
    public static class StringTool
    {
        /// <summary>
        /// Get a substring of the first N characters.
        /// </summary>
        public static string Truncate(this string source, int length)
        {
            if (source.Length > length)
            {
                source = source.Substring(0, length);
            }
            return source;
        }

        /// <summary>
        /// Get a substring of the first N characters. [Slow]
        /// </summary>
        public static string Truncate2(this string source, int length)
        {
            return source.Substring(0, Math.Min(length, source.Length));
        }
    }
}

出力:

A really big string that has more than 140 chars. This string is supposed to be
trunctaded by the Truncate extension method defined in class
于 2013-01-21T22:42:40.370 に答える
0

Lenielの回答に似ていますが、ひねりがあります。表示された文字列が切り捨てられていることを示すために、省略記号を追加したい場合があります。

    /// <summary>
    /// Converts the value of the specified string to a truncated string representation
    /// </summary>
    /// <param name="source">The specified string</param>
    /// <param name="length">Integer specifying the maximum number of characters to retain from the specified string.</param>
    /// <param name="appendEllipsis">Determines whether or not to append an ellipsis to the truncated result.  If the specified string is shorter than the length parameter the ellipsis will not be appended in any event.</param>
    /// <returns>A truncated string representation of the specified string.</returns>
    public static String Truncate(this String source, int length, bool appendEllipsis = false)
    {
        if (source.Length <= length)
            return source;

        return (appendEllipsis)
            ? String.Concat(source.Substring(0, length), "...")
            : source.Substring(0, length);
    }
于 2014-05-01T12:19:16.143 に答える
0

これは私にとってはうまくいきました-truncate()関数は私のVisualStudioでプルアップされなかったので、私はを使用しSubstring()ました。

Text='<%# Eval("LastChangedTime", "{0:t}").ToString().Substring(0,10) %>'

これは、最も近い1/10秒までの時間を表示します。

于 2020-04-20T11:13:28.333 に答える