我试图截断一个长字符串,仅在我的索引页面上显示。它显示如下:
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
描述可以是500个字符长,但我无法在该网格布局上显示那么多。我想只显示前25个,因为他们可以在详细信息页面上看到所有内容,但我似乎无法在模型级别截断它。
这样的事情会很好:
@Html.DisplayFor(modelItem => item.Description.Take(25))
@Html.DisplayFor(modelItem => item.Description.Substring(0,25)
修改
当我尝试使用任何一种方法时,我在运行时遇到以下异常。
Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
答案 0 :(得分:22)
不要使用html帮助器。就这样做:
@item.Description.Substring(0, Math.Min(item.Description.Length, 25));
我假设您处于某个循环中,其中item
是当前元素。
答案 1 :(得分:5)
您可以使用扩展方法执行此操作。
public static string Truncate(this string source, int length)
{
if (source.Length > length)
{
source = source.Substring(0, length);
}
return source;
}
然后在你看来:
@item.Description.Truncate(25)
答案 2 :(得分:4)
您可以在数据到达View之前截断数据,也可以使用此Razor:
@{
var shortDescript = String.Concat(modelItem.Take(25));
}
@Html.DisplayFor(modelItem => shortDescript)
答案 3 :(得分:1)
您可以考虑为需要的实例创建一个特殊的模型属性:
public class MyModel
{
public string MyDescription {get; set;}
public string MyShortDescription {
get
{
return Truncate(MyDescription, 25);
}
}
private string Truncate(string, howMany)
{
// Code to perform the substring here
}
@Html.DisplayFor(modelItem => item.MyShortDescription);
答案 4 :(得分:1)
如果您想使用HTML帮助,请尝试。假设您希望在第一个空格 .IndexOf(&#39;&#39;)之前获取字符串的一部分(或者您可以像您所说的那样使用预定义的索引25):
@Html.DisplayFor(modelItem => item.Description).ToString().Substring(0,item.Description.IndexOf(' '))
答案 5 :(得分:0)
尝试扩展
public static string TruncateMiddle(this string value, int lengthExpected, string separator = "...")
{
if (value.Length <= lengthExpected) return value;
decimal sepLen = separator.Length;
decimal charsToShow = lengthExpected - sepLen;
decimal frontChars = Math.Ceiling(charsToShow / 2);
decimal backChars = Math.Floor(charsToShow / 2);
return value.Substring(0, (int)frontChars) + separator + value.Substring(value.Length - (int)backChars);
}
使用
MyLongString.TruncateMiddle(50)
返回类似这样的内容:Lorem ipsum dolor坐下来...... onsectetur cras amet。
答案 6 :(得分:0)
ASP Net Core 3 MVC的HTML帮助器。
public static HtmlString Truncate(this IHtmlHelper helper, string text, int maxLength = 100)
{
if (text == null) return new HtmlString("");
if (text.Length > maxLength)
{
text = text.Substring(0, maxLength) + "...";
}
return new HtmlString($"{text}");
}
在cshtml文件中使用
@Html.Truncate(item.Description)
或者您可以使用param
@Html.Truncate(item.MusicUrl, 50)