4

如果 Razor CSHTML 页面中的字符串长于 X 字符,我该如何格式化它:

<p>@Model.Council</p> 

Example for an X = 9

-> if Council is "Lisbon", then the result is "<p>Lisbon</p>"
-> if Council is "Vila Real de Santo António", then the result is "<p>Vila Real...</p>" with the title over the <p> "Vila Real de Santo António" showing the complete information

谢谢。

4

4 回答 4

8

对于任何字符串。见这里

对于您的代码...

@(Model.Council.Length>10 ? Model.Council.Substring(0, 10)+"..." : Model.Council)
于 2013-05-27T01:39:57.990 回答
5

这是您可以使用的辅助方法:

public static class StringHelper
{
    //Truncates a string to be no longer than a certain length
    public static string TruncateWithEllipsis(string s, int length)
    {
        //there may be a more appropiate unicode character for this
        const string Ellipsis = "...";

        if (Ellipsis.Length > length)
            throw new ArgumentOutOfRangeException("length", length, "length must be at least as long as ellipsis.");

        if (s.Length > length)
            return s.Substring(0, length - Ellipsis.Length) + Ellipsis;
        else
            return s;
    }
}

只需从您的 CSHTML 内部调用它:

<p>@StringHelper.TruncateWithEllipsis(Model.Council, 10)</p>
于 2013-05-27T01:43:13.687 回答
1
Model.Console.Length <= 9 ? Model.Console : Model.Console.Substring(0, 9) + "...";

这是使用Tirany Operator

它检查长度是否小于或等于 9,如果是则在 ? 之后使用左侧 , 如果为 false ,则使用右侧,它将在 9 个字符后切断字符串并附加"..."

您可以将此正确内联在您的剃刀代码中,而不必从视图中调用任何代码。

注意 - 如果Model.Console为 null 或为空,这可能会中断

于 2013-05-27T01:40:27.480 回答
1

作为一个选项,一个 Regex.Replace (虽然它可能更容易使它成为一个函数并使用一个常规的Substring

Regex.Replace("Vila Real de Santo António", "^(.{9}).+", "$1...")
于 2013-05-27T01:45:55.573 回答