如何在asp.net mvc中显示Post的前200个字符

本文关键字:Post 显示 的前 200个 字符 mvc asp net | 更新日期: 2023-09-27 18:02:51

<div class="panel-body">@Html.Raw(item.PostContent.Substring(0, 200))</div>

上面的代码产生错误!当我将鼠标悬停在item.PostContent上时,它告诉我它是字符串!

<div class="panel-body">@Html.Raw(item.PostContent)</div>

可以很好地显示整个帖子的内容!我该怎么做才能解决这个问题?我想获取一篇文章的前200个字符,并将它们作为摘录显示。

如何在asp.net mvc中显示Post的前200个字符

下面的内容可能会有用。

public static class HtmlPostExtensions
{
    public static IHtmlString Post(this HtmlHelper helper, string postContent)
    {
        string postStr = postContent;
        if (postStr.Length > 200)
        {
               postStr = postStr.Substring(0, 200);    
        }
        return MvcHtmlString.Create(postStr);
    }
}

可以用作

@Html.Post(item.PostContent)
@if (!string.IsNullOrEmpty(item.PostContent) && item.PostContent.Length > 200)
{
  <span>@Html.Raw(item.PostContent.Substring(0, 200))</span>
}
else
{
  <span>@Html.Raw(item.PostContent)</span>
}

检查length是否大于200并截断,否则直接使用length

<div class="panel-body">@Html.Raw(item.PostContent.Substring(0, item.PostContent.Length > 200 ? 200 : item.PostContent.Length))</div>

如果可能的话,你应该在传递给视图之前在action方法中这样做。这将使razor代码/标记更加清晰。它可以在投影模型时完成[think LINQ]

文章的内容是html格式的。因此,首先我需要得到平面该HTML源的文本然后获得前200个字符。任何解决方案?

您必须首先解析动作中的内容以获得所需的内容,然后根据需要进行截断。不要给视图添加太多的复杂性。

你可以使用Html敏捷包(NuGet htmllagilitypack 1.4.9.5)来解析内容并提取该Html的普通测试,然后获得前200个字符

var html = new HtmlDocument();
html.LoadHtml(item.PostContent);
var root = html.DocumentNode;
var postContent = root.InnerText;
var postLength = postContent.Length;
var truncatedContent = postContent.Substring(0, postLength > 200 ? 200 : postLength);

同样,这应该在向View发送项之前完成。